问下关于前端怎么根据值来生成对应的颜色

2023-02-03 10:42:50 +08:00
 allisone

0 分表示 green 10 分表示 red 现在想通过给一个任意的 0-10 的之间的分值如 3.6 返回 color 到 green 中间的 16 进制色值 想问问大佬这个该怎么实现

3558 次点击
所在节点    JavaScript
28 条回复
Cosmic4764
2023-02-03 10:46:26 +08:00
#ffffff = ff+ff+ff = 255+255+255

是这么理解吧?
allisone
2023-02-03 10:49:49 +08:00
@Cosmic4764 不太懂,就是能根据分值显示从绿色、浅绿色、浅红色、 红色这样的,分值表示颜色靠近红色还是绿色,同时深浅不一样
horseInBlack
2023-02-03 10:53:23 +08:00
https://developer.mozilla.org/zh-CN/docs/Web/CSS/color

CSS 颜色值主要有两种:

一种 HEX 值,比如 color:#00FF00
一种直接写 rgb(a)值 color: rgb(34, 12, 64, 0.6)

你这种情况直接 用 255*( 0-1 )的随机数就行了

至于究竟是原生、jQuery 修改 CSS 属性,还是 Vue 、React 就看你自己了
hellsnow
2023-02-03 10:53:28 +08:00
从 rgb(0,255,0)到 rgb(0,255,0)
hellsnow
2023-02-03 10:54:15 +08:00
@hellsnow 从 rgb(255,0,0)到 rgb(0,255,0)
AlphaTr
2023-02-03 11:03:25 +08:00
rgb(255 * value / 10, 255 * (10 - value) / 10, 0)
zenxds
2023-02-03 11:06:05 +08:00
debuggerx
2023-02-03 11:18:42 +08:00
@AlphaTr hsl 更简单:hsl(120 * value / 10, 100%, 50%)
cs8425
2023-02-03 11:21:13 +08:00
otakustay
2023-02-03 11:27:49 +08:00
这个应该用 hsl 或 hsb 来转出颜色吧,楼上用 rgb 的弄不好的……
当然我更建议写死 10 个档,不要做平滑过渡,没啥意思
allisone
2023-02-03 11:31:05 +08:00
@AlphaTr @debuggerx @cs8425 @otakustay rgb 和 hsl 我都试下,10 个档位我之前也试了,主要是 10 个颜色自己选效果没那么好
otakustay
2023-02-03 11:33:59 +08:00
@allisone #11 去找天气预报的气温图,那里有分档的颜色,虽然没那么优雅但接受度高
dog
2023-02-03 11:44:34 +08:00
https://ant.design/docs/spec/colors-cn 这里随便选一套颜色
还不满足在页面上有 色板生成工具 填入你的主色,自动生成一套渐变色
libook
2023-02-03 11:49:14 +08:00
最简单的是 HSL ,只需要变一个角度值就可以变颜色。但不一定都符合颜色感官要求。
或者你可以定几个基准点,比如 0-10 的 11 个点分别都用什么颜色,然后再考虑每个节点之间的过度方案,比如两个节点值在 HSL 的几个分量上的插值等比例过度。
MossFox
2023-02-03 11:58:36 +08:00
虽然不知道怎么做合适,但先丢个 npm 包在这
https://www.npmjs.com/package/@ctrl/tinycolor

如果要用 HSL 来做过渡、然后转换成 HEX ,这个包可以帮忙。
GiantHard
2023-02-03 12:10:53 +08:00
我猜你可能在做可视化相关的工作,推荐你用 chroma js https://gka.github.io/chroma.js/#chroma-bezier
AyaseEri
2023-02-03 12:43:05 +08:00
Hue 上划分十条线,那不就是每 1 分逆时针转 36°。tinycolor2 就能做。效果好需要找 UX 一起调配一下饱和度与亮度。
tool2d
2023-02-03 12:55:32 +08:00
提到 HSL 大概率是程序员,美术插值一般不用颜色空间,都是自己挑选渐变关键色。

只要关键色够多,RGB 插值也足够用了。
allisone
2023-02-03 13:21:45 +08:00
感谢大家给予的各种方案,我会一个个尝试。大佬真的是多呀
mgso
2023-02-03 14:03:16 +08:00
d3.js 中有一个模块叫 scaleLinear 。线性比例尺
它接收一个定义域 domain([min,max])和一个区间范围 range([0,100]).
范围可以是颜色

示例:
import { scaleLinear } from 'd3-scale'
const colorScale = scaleLinear()
. domain ([0, 100])
. range(['green','red']);

console.log(colorScale(75)); // rgb(191, 32, 0)

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/912798

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX