zoukankan      html  css  js  c++  java
  • 动画原理——颜色值处理

    1.使用十六进制的颜色

    有时候所提供颜色值的格式并不是你需要的,这时就需要进行转化。

    //转为16进制颜色属性
    var hexColor = '#' + (16733683).toString(16);
    console.log(hexColor);
    //转为10进制数字
    var color = window.parseInt(hexColor.slice(1), 16);
    console.log(color);

    2.颜色合成

    三原色红绿蓝,当我们想要获取紫色时,可以用红0xFF (255),绿0x55(decimal 55),蓝0xF3 (decimal 243)混合得到。但注意得到的结果是10进制的,需要转化才可以使用代码计算如下:

    var color = 0xFF << 16 | 0x55 << 8 | 0xF3;

    3.颜色提取

    当你拥有一个颜色时,你想分解出三个基本色的色值,可以使用&,当对应位两个都为1结果才为1。

    因为&的是在二进制下运算的。上述紫色的二进制为111111110101010111110011,从前到后,每8个二进制依次表示红绿蓝的色值,现在我们想获得蓝的色值。可以这样计算

    111111110101010111110011 进行&运算

    000000000000000011111111

    代码是:

    console.log(16733683&0x0000FF)

    4.使用带透明度的颜色属性

    这个比较麻烦,不再可以简单的#加色值,而是要构建这样的字符串"rgba(R, G, B, A)",代码如下。

    var r = 0xFF,
     g = 0x55,
     b = 0xF3,
     a = 0.2,
     color = "rgba(" + r + "," + g + "," + b + "," + a + ")";
    console.log(color);

    5.颜色工具

    colorToRGB工具,转成rgb格式

    utils.colorToRGB = function (color, alpha) {
     //if string format, convert to number
     if (typeof color === 'string' && color[0] === '#') {
     color = window.parseInt(color.slice(1), 16);
     }
     alpha = (alpha === undefined) ? 1 : alpha;
     //extract component values
     var r = color >> 16 & 0xff,
     g = color >> 8 & 0xff,
     b = color & 0xff,
     a = (alpha < 0) ? 0 : ((alpha > 1) ? 1 : alpha); //check range
     //use 'rgba' if needed
     if (a === 1) {
     return "rgb("+ r +","+ g +","+ b +")";
     } else {
     return "rgba("+ r +","+ g +","+ b +","+ a +")";
     }
    };

    parseColor转换颜色格式

    utils.colorToRGB = function (color, alpha) {
     //if string format, convert to number
     if (typeof color === 'string' && color[0] === '#') {
     color = window.parseInt(color.slice(1), 16);
     }
     alpha = (alpha === undefined) ? 1 : alpha;
     //extract component values
     var r = color >> 16 & 0xff,
     g = color >> 8 & 0xff,
     b = color & 0xff,
     a = (alpha < 0) ? 0 : ((alpha > 1) ? 1 : alpha); //check range
     //use 'rgba' if needed
     if (a === 1) {
     return "rgb("+ r +","+ g +","+ b +")";
     } else {
     return "rgba("+ r +","+ g +","+ b +","+ a +")";
     }
    };

      console.log(utils.parseColor(0xFFFF00))
      console.log(utils.parseColor(0xFFFF00,true))

     
  • 相关阅读:
    底部导航栏
    判断手机是否连接网络
    瀑布流(圆角,卡片效果)
    列表卡片效果
    使用Glide改变图片的圆角
    条形码EAN-13码和EAN-8码的原理
    自定义底部弹窗
    【代码笔记】Java常识性基础补充(一)——赋值运算符、逻辑运算符、三元运算符、Scanner类、键盘输入、Random类、随机数
    【Android】9.0活动的生命周期(二)——实际代码演示
    【Android】8.0活动的生命周期(一)——理论知识、活动的启动方式
  • 原文地址:https://www.cnblogs.com/winderby/p/4244218.html
Copyright © 2011-2022 走看看