我正在开发一个投票网站,其中投票选项的进展会根据投票的百分比改变颜色。目前,颜色的变化使用一个if语句来检查进度百分比。有没有更好的方法来做到这一点,而不依赖于这么多的if语句?像是某种梯度?我可以使用vanilla和jQuery解决方案。
function progressColor(progress) {
if (progress >= 0 && progress <= 24) return '#FFE169';
else if (progress >= 25 && progress <= 49) return '#FFDE59';
else if (progress >= 50 && progress <= 74) return '#FF914D';
else if (progress >= 75 && progress <= 89) return '#FF7A7A';
else if (progress >= 90 && progress <= 100) return '#FF5757';
}
5条答案
按热度按时间mqxuamgl1#
这是一个近似的参数化你的色标。
您也可以使用滑块更改背景颜色。
jyztefdp2#
同样的功能,使用数学。底色:0xFFE 169最终颜色0xFF 5757和它们之间.0xFFE169 - 0xFF 5757 = 8a 12,因此:每个百分比都是十六进制的~ 162 =(DEC)354
zyfwsgd63#
对计算机来说,颜色只是一串数字。这意味着,从理论上讲,你可以做一些数学计算,得到一个数字,这是一个特定的百分点之间的差异,一个较低的数字和较高的数字。有了你的规模,我不认为它是那么简单,但我们将保持这个想法的本质,并得到一些帮助与库,做所有复杂的数学:chroma.js。
chrome.js有一个名为
scale
的函数,它可以获取出现在刻度上的颜色数组。使用你问题中的颜色,你可以建立一个像这样的规模:scale
返回一个函数,你可以用一个百分比来调用它,以获得刻度上该百分比的颜色。下面是一个演示,从你的问题中的颜色构建一个规模,并使用输入来改变百分比,并获得规模上的特定颜色。
rkue9o1l4#
你可以使用一种不太常见的switch语法
你不需要else if,因为条件是相互排斥的,只需要separate if语句就可以了。
我很喜欢if语法,它很健壮,可以准确地显示你在做什么
kmb7vmvb5#
就我个人而言,我很感激我偏离了你指定的配色方案,我会按如下方式处理(解释性注解在下面的代码中):
JS Fiddle demo。
参考文献:
backdrop-filter
。block-size
。calc()
。inline-size
。brightness()
。hue-rotate()
。mix-blend-mode
。var()
。closest()
。CSSStyleDeclaration.setProperty()
。document.querySelector()
。Element.querySelector()
。Event()
constructor。EventTarget.addEventListener()
。EventTarget.dispatchEvent()
。