javascript - 使用javascript计算与数字对应的颜色
问题描述
我有一个数字数据,我需要将其绘制成网格并根据数字为每个块着色。较大的数字应具有较深的蓝色阴影,较小的应具有较浅的蓝色阴影。如何找到对应的颜色?
解决方案
你可以使用HSL
颜色。第一个参数是色调,第二个是饱和度,第三个是亮度值。在色轮上,蓝色位于 240º,因此可以将 H 值设置为 240。然后可以将饱和度设置为 100%,将亮度值设置为基于输入数字的百分比(通过取最大值上的当前数据点)。
请参见下面的示例:
const data = [];
const MAX = 100;
const getColor = (n, max, error) => {
return `hsl(240, 100%, ${(1-n/max) * 100}%)`
}
let html = "";
for(let i = 0; i < MAX; i++) {
html += `<div class='box' style="background-color: ${getColor(i, MAX)}">${i}</div>`
}
document.body.innerHTML = html;
.box {
width: 100px;
height: 100px;
}
编辑
如果要添加边界,则要将 的输出压缩0-100
为介于 之间0+bl to 100-br
。这种类型的映射可以使用这里提出的公式来完成,其中bl
是从左侧开始的边界(即:最低的蓝色)和br
从右侧开始的边界(即:最深的蓝色)。
const data = [];
const MIN = 0; // min value in data (Math.min(...data))
const MAX = 100; // max value in data (Math.max(...data))
const map = (is, ie, os, oe, val) => os + ((oe - os) / (ie - is)) * (val - is);
const getColor = (n, min, max, bl=0, br=0) => {
const l = 100 - map(min, max, bl, 100-br, n);
return `hsl(240, 100%, ${l}%)`
}
let html = "";
for(let i = 0; i < MAX; i++) {
html += `<div class='box' style="background-color: ${getColor(i, MIN, MAX, 10, 40)}">${i}</div>`
}
document.body.innerHTML = html;
.box {
width: 100px;
height: 100px;
}
推荐阅读
- google-cloud-platform - Cloud Endpoint 是否支持通过 cookie 进行身份验证?
- python-3.x - 无法拆分字符串并获得打印在 csv 文件上的所需行,该文件使用 python 由制表符分隔
- swift - Swift CORE ML 识别物体并检查它是否是一只手?
- php - 我在 wordpress 中开发了一个自定义主题,但 css 文件无法通过 function.php 发出声音
- python - Django 处理多个模型的外键
- html - 如何使用内联 CSS 更改表格字体/内容的颜色
- node.js - 带有嵌套数组的 React-Table,无法访问嵌套内容
- ios - 在 UICollectionView 中加载图像时,SDWebImage 5.0 崩溃
- c - 为什么在 realloc 不能使用 MVC++ 之后为指针赋值
- javascript - 如何使用 jsPDF 和 html2Canvas 计算转换为图像以适合 PDF 的 div 高度?