首页 > 其他分享 >js计算线性渐变的中间颜色值

js计算线性渐变的中间颜色值

时间:2024-03-28 16:47:53浏览次数:25  
标签:colorA colorB const 16 渐变 hex js 线性 ratio

可能会使用js计算线性渐变的中间颜色值,写个demo记录下

<style>
  #colors {
    margin-top: 2rem;
    display: flex;
  }
  #colors div {
    width: 100px;
    height: 100px;
  }
</style>
<div id="colors">
  <div></div>
  <div></div>
  <div></div>
  <div></div>
  <div></div>
</div>

<script>
  // RGB转16进制色值
  function rgbToHex(red, green, blue) {
    const toHex = (colorValue) => {
      const hex = colorValue.toString(16);
      return hex.length == 1 ? "0" + hex : hex;
    };
    return "#" + toHex(red) + toHex(green) + toHex(blue);
  }

  // 16进制色值转RGB
  function hexToRgb(hex) {
    hex = hex.replace(/^\s*#|\s*$/g, "");
    let red = parseInt(hex.substr(0, 2), 16);
    let green = parseInt(hex.substr(2, 2), 16);
    let blue = parseInt(hex.substr(4, 2), 16);

    return [red, green, blue];
  }

  //计算线性渐变的中间颜色值
  function getColorBetweenTwoColors(colorA_str, colorB_str, ratio) {
    const colorA = hexToRgb(colorA_str);
    const colorB = hexToRgb(colorB_str);
    const r = Math.round((colorB[0] - colorA[0]) * ratio + colorA[0]);
    const g = Math.round((colorB[1] - colorA[1]) * ratio + colorA[1]);
    const b = Math.round((colorB[2] - colorA[2]) * ratio + colorA[2]);

    return rgbToHex(r, g, b);
  }

  const colorA = "#FF0000"; //红色
  const colorB = "#00FF00"; //绿色

  const radio_arr = [0, 0.25, 0.5, 0.75, 1];
  const elems = document.querySelectorAll(`#colors div`);
  for (let i in radio_arr) {
    elems[i].style.backgroundColor = getColorBetweenTwoColors(colorA, colorB, radio_arr[i]);
  }
</script>

 

标签:colorA,colorB,const,16,渐变,hex,js,线性,ratio
From: https://www.cnblogs.com/caroline2016/p/18102031

相关文章

  • Fastjson反序列化分析
    依赖先研究1.2.24版本的,版本高了就有waf了,不过也能绕,高版本以后再说<dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>1.2.24</version></dependency><dependency><groupId&g......
  • python-json数据、pyecharts的入门使用(折线图)
    目录1. json数据格式 1.1 json.dumps()1.2 json.loads()2. pyecharts的入门使用(折线图)2.1  pyecharts使用的简单示例2.1.1 导包2.1.2 创建对象2.1.3 添加x轴数据2.1.4 添加y轴数据2.1.5 设置全局配置项2.1.6 render()方法,生成图像3. ......
  • 力扣刷题Days26-122.买股票最佳时期||(js)
    目录1,题目2,代码动态规划3,回顾与总结3.1解题思路回顾(1)定义状态(2)转移方程3.2javascript中语法二维数组的创建3.3动态规划状态变化的实现1,题目给你一个整数数组 prices ,其中 prices[i] 表示某支股票第 i 天的价格。在每一天,你可以决定是否购买和/或出售股票......
  • 使用fabric.js框选图片区域并生成svg图
    仍然是在图片上特定区域根据数值显示不同的颜色的需求,改进下代码。增加了测量辅助线、对齐辅助线、生成svg图等,基本满足需求。demo中包括了生成json、svg字符串和下载svg图。<scriptsrc="../plugins/fabric.min.js"></script><scriptsrc="../plugins/aligning_guidelines.......
  • 在Vue.js框架中,activated和created的区别
    在Vue.js框架中,activated和created两个钩子函数都是在组件被创建时执行的函数,但它们的使用场景略有不同。createdcreated钩子函数是在组件被创建(即实例化)时执行的,可以用它来初始化组件的数据、监听事件、调用方法等操作。它是组件生命周期中的第一个钩子函数,通常用于组件初......
  • JS中为什么forEach方法不能终止
    forEach是我们在日常工作中经常使用到的方法,但是你有什么尝试使用forEach进行停止或终止等操作呢?一、走进forEach对于forEach了解不多的,只知道它可以遍历数组,如果有这么一个操作:一个数组[0,1,2,3,4,5],打印出[0,1,2,3],可能会这么写。1.1尝试returnconstarr=[0,......
  • js 回调 callback
    <html><head><title>按钮点击事件示例</title><script>functiona(callback){console.log("执行函数a!");console.log("调用回调函数");callback();//调用回调函数}functionb(){console.log("回调函数b"......
  • Day52:WEB攻防-XSS跨站&反射型&存储型&DOM型&标签闭合&输入输出&JS代码解析
    目录XSS跨站-输入输出-原理&分类&闭合XSS跨站-分类测试-反射&存储&DOM反射型XSS存储型XSSDOM-base型XSS:(某案例测试)知识点:1、XSS跨站-输入输出-原理&分类&闭合2、XSS跨站-分类测试-反射&存储&DOMXSS跨站-输入输出-原理&分类&闭合漏洞原理:接受输入数据,输出显......
  • nodejs 核心模块
    nodejs核心模块Node.js的核心模块是Node.js发行版自带的模块,无需通过npm进行安装。你可以在Node.js的官方文档中找到所有核心模块的详细列表。以下是一些常用核心模块的简单使用示例:http 模块:创建一个简单的HTTP服务器。  consthttp=requir......
  • 华为OD机试 - 最多购买宝石数目(Java & JS & Python & C & C++)
    须知哈喽,本题库完全免费,收费是为了防止被爬,大家订阅专栏后可以私信联系退款。感谢支持文章目录须知题目描述输入描述输出描述解题思路:题目描述橱窗里有一排宝石,不同的宝石对应不同的价格,宝石的价格标记为gems[i]0≤i<nn=gems.length宝石可同时......