1. /**
  2. * 获取颜色值
  3. */
  4. const color2RGB = (color) => {
  5. if (typeof color !== 'string' || (color.length !== 7 && color.length !== 4)) return [0, 0, 0];
  6. color = color.substr(1);
  7. if (color.length === 3) {
  8. return color.split('').map(str => parseInt(str + str, 16));
  9. }
  10.  
  11. let result = [];
  12. for (let i = 0; i < 6; i += 2) {
  13. result.push(parseInt(color.substr(i, 2), 16));
  14. }
  15.  
  16. return result;
  17. }
  18.  
  19. /**
  20. * 加深:correctionFactor<0
  21. 变亮:correctionFactor>0
  22. -1.0f <= correctionFactor <= 1.0f
  23.  
  24. @colorStr 颜色值:#ff0000
  25. */
  26. const changeColor = (colorStr, correctionFactor) => {
  27. let color = color2RGB(colorStr)
  28. let red = parseFloat(color[0]);
  29. let green = parseFloat(color[1]);
  30. let blue = parseFloat(color[2]);
  31.  
  32. if (correctionFactor < 0) {
  33. correctionFactor = 1 + correctionFactor;
  34. red *= correctionFactor;
  35. green *= correctionFactor;
  36. blue *= correctionFactor;
  37. }
  38. else {
  39. red = (255 - red) * correctionFactor + red;
  40. green = (255 - green) * correctionFactor + green;
  41. blue = (255 - blue) * correctionFactor + blue;
  42. }
  43.  
  44. if (red < 0) red = 0;
  45.  
  46. if (red > 255) red = 255;
  47.  
  48. if (green < 0) green = 0;
  49.  
  50. if (green > 255) green = 255;
  51.  
  52. if (blue < 0) blue = 0;
  53.  
  54. if (blue > 255) blue = 255;
  55.  
  56. red = parseInt(red);
  57. green = parseInt(green);
  58. blue = parseInt(blue)
  59.  
  60. return [red, green, blue];
  61. }

第一种方式:

  使用rgba()对颜色进行透明度调整, 例如:rgba(0,0,0,0.5)

     let color = `rgba(${color2RGB('#FF0000').join(',')},0.1)`;

第二种方式:

  使用changeColor方法来计算颜色的加深、变浅度

let color =`rgb(changeColor('#FF0000', -0.4).join(',')},0.1)`;

第三种方式:

  使用背景色重叠来实现加深效果

  1. .aa {
  2. width: 200px;
  3. height: 200px;
  4. background-color: #ff0000;
  5. position: relative;
  6. }
  7. .btn {
  8. width: 80px;
  9. height: 80px;
  10. background-color: rgb(0, 0, 0, 0.2);
  11. border-radius: 5px;
  12. position: absolute;
  13. top: 20px;
  14. left: 20px;
  15. }
  16.  
  17.   <div class='aa'>
  18.     <div class='btn'>我是浮层按钮</div>
  19.   </div>

js 改变颜色值的更多相关文章

  1. 【问题】js 改变鼠标样式,chrome浏览器不能立即更新,暂没有解决办法

    元素的css,cursor可以改变鼠标样式.也就是鼠标放到元素上去时,改变为相应状态. 通过JS改变cursor时,我发现chrome浏览器不能立即更新,需要动一下鼠标才行,试了几个其它浏览器都是立即 ...

  2. js改变HTML元素的值

    js改变HTML元素的值(常用,备忘) <!DOCTYPE html> <html> <body> <h1>我的第一段 JavaScript</h ...

  3. JS改变input的value值不触发onchange事件解决方案 (转)

    方法(一)(转载的网络资料) 需要了解的知识     首先,我们需要了解onchange和onpropertychange的不同: IE下,当一个HTML元素的属性改变的时候,都能通过 onprope ...

  4. js改变盒子大小(上下左右)分析

    js改变盒子大小 知识点 三个mouse事件:mousedown mousemove mouseup css的定位和cursor 思路 先解决单边问题识别范围,得到所选区域 event. 根据距离,判 ...

  5. js改变或添加className

    js改变或添加className <style type="text/css"> .newDiv { font-weight: bold; } </style&g ...

  6. js改变下拉框内容

      js改变下拉框内容 CreateTime--2018年4月8日18:47:38 Author:Marydon 适用场景:通常情况下,级联菜单.通过ajax异步获取后台数据改写下拉框内容会有这种需求 ...

  7. 用JS改变的元素CSS样式,css里display :none 隐藏 block 显示

    CSS样式的引用有3种方式:style引用.class引用.id引用,所以js改变元素的样式我们也分3种来说. 1.js改变由style方式引用的样式:方法一:document.divs.style. ...

  8. js改变css样式

      CreateTime--2017年10月31日15:14:12 Author:Marydon js改变css样式 1.js改变单个css样式 HTML部分 <div id="tes ...

  9. 用JS改变页面中b标签的样式啊 样式的等

    用JS改变页面中b标签的样式啊 样式的等    ,实际上是在标签内加上样式 ,用媒体查询的话 ,不能生效 <!DOCTYPE html> <html lang="en&qu ...

随机推荐

  1. vue 路由 以及默认路由跳转

    https://router.vuejs.org/ vue路由配置: 1.安装 npm install vue-router --save / cnpm install vue-router --sa ...

  2. MySQL 分区间进行数据展示 实例

    如何进行分区间数据统计示例 业务场景:统计消费总金额大于1000元的,800到1000元的,500到800元的,以及500元以下的人数. SELECT COUNT(CASE WHEN IFNULL(t ...

  3. sas 配置文件和AutoExec

    AS代码中常常会用用到一些个人习惯的编码定义,每次重复写,效率会很低,这时可以通过AutoExec 写入到系统默认项里. 如我最经常使用的: OPTIONS NOCENTER LS=MAX PS=MA ...

  4. Android--普通注册页面实现(无功能)

    reg.xml <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmln ...

  5. Json3:使用gson做节点解析

    Gson的节点对象:JsonElement : 所有的节点 都是 JsonElement 对象.JsonPrimitive : 基本的数据类型的节点对象,JsonElement的子类JsonNull ...

  6. 基于tcp的下载文件,以及struct模块的应用。

    一 基于TCP的下载 客户端: from socket import * import os def main(): tcp_socket = socket(AF_INET, SOCK_STREAM) ...

  7. ELK新手教程(二)

    暂不排版,后面整理. logstash 使用配置文件 在bin目录下创建一个名为test.conf的文件,内容为: input { stdin {} } output { stdout{} } 执行命 ...

  8. 完全使用css编写复选框

    在日常的项目中,出现复选框或者单选框,应该都属于常见需求了,最开始阶段,一般只有两种可能性: 一.完全使用  <input type="checkbox" />或者&l ...

  9. Java可视操作界面例子

    package rom; import java.lang.*; import java.awt.*; import java.awt.event.ActionEvent; import java.a ...

  10. fabric-network_setup.sh安装脚本分析

    在进行镜像安装前,提供了一个sample脚本的下载,可以使用该脚本进行容器的启停.这里对该脚本进行分析. fabric/release/linux-amd64/network_setup.sh 脚本提 ...