JavaScript计算两个颜色之间的渐变色值
0 点赞
0 条评论
2601 次浏览
发布于 2022-04-25 16:52
本文主要讲述两个十六进制颜色,对给定的两个颜色值进行渐变计算,得到渐变的所有色值的数组。
上代码
/**
* rgb颜色转成hex16进制颜色值
* @param r
* @param g
* @param b
* @returns {string}
*/
const rgbToHex = (r, g, b) => {
const hex = ((r << 16) | (g << 8) | b).toString(16);
return `#${new Array(Math.abs(hex.length - 7)).join('0')}${hex}`;
};
/**
* hex16进制颜色转成rgb颜色
* @param hexStr
* @returns {*[]}
*/
const hexToRgb = (hexStr) => {
const substrHandle = (arg1, arg2) => hexStr.substr(arg1, arg2);
const parseIntHandle = (v) => Number.parseInt(v, 16);
if (hexStr.length === 4) {
// #000
return substrHandle(1).split('').map((s) => 0x11 * parseIntHandle(s, 16));
}
// #000000
return [substrHandle(1, 2), substrHandle(3, 2), substrHandle(5, 2)].map((s) => parseIntHandle(s, 16));
};
/**
* 计算渐变过渡色
* @param startColor
* @param endColor
* @param step
* @returns {String[]}
*/
const gradientTransitionColor = (startColor, endColor, step) => {
// 将hex转换为rgb
const sColor = hexToRgb(startColor);
const eColor = hexToRgb(endColor);
// 计算R\G\B每一步的差值
const rStep = (eColor[0] - sColor[0]) / step;
const gStep = (eColor[1] - sColor[1]) / step;
const bStep = (eColor[2] - sColor[2]) / step;
const gradientColorArr = [];
for (let i = 0; i < step; i += 1) {
// 计算每一步的hex值
gradientColorArr.push(
rgbToHex(
Number.parseInt(rStep * i + sColor[0], 10),
Number.parseInt(gStep * i + sColor[1], 10),
Number.parseInt(bStep * i + sColor[2], 10),
),
);
}
return gradientColorArr;
};
gradientTransitionColor('#ffffff', '#000000', 10);
//['#ffffff', '#e5e5e5', '#cccccc', '#b2b2b2', '#999999', '#7f7f7f', '#666666', '#4c4c4c', '#333333', '#191919']
"赞助我们,我们才能做的更多&更好"
赞助支持
还没有评论
写下你的评论...
最热文章
使用dart-sass替换node-sass
5191 浏览 · 0 评论
浏览器后退跳转到指定的页面
3866 浏览 · 0 评论
好玩的CSS3(3)-- 翻转(旋转正反两张)图片
3859 浏览 · 0 评论
Flutter适配夜间模式
3610 浏览 · 0 评论
pc端常用电脑屏幕分辨率尺寸适配
3570 浏览 · 0 评论
最新文章
js通过扫码枪快速录入的实现
406 浏览 · 0 评论
使用 WebSocket 实现你画我猜实时绘图
745 浏览 · 0 评论
基于code-server部署自己的云端vscode
2871 浏览 · 0 评论
支付宝动态收款码生成自定义金额及备注
2863 浏览 · 0 评论
使用 nohup 命令将程序挂载在后台执行
1959 浏览 · 0 评论
基于OpenLayers实现离线地图
2801 浏览 · 0 评论