我有它,这样随着圆的完成,正在绘制的圆将慢慢过渡到彩虹中。前两个工作得很好。不过,在那之后,它停止缓慢变化,只是捕捉到一个阴影,直到下一个阴影。你能告诉我我做错了什么吗?这可能是非常明显的事情:C
function setcolor() {
if (degrees <= 60) {
var g = Math.floor(255 * (degrees/60));
color = "rgb(255, "+ g +", 0)";
}
else if (degrees <= 120) {
var r = Math.floor(255 / (degrees/60));
color = "rgb("+ r +", 255, 0)";
}
else if (degrees <= 180) {
var b = Math.floor(255 * (degrees/60));
color = "rgb(0, 255, "+ b +")";
}
else if (degrees <= 240) {
(g = Math.floor(255 /(degrees/60)));
color = "rgb(0, "+ g +", 255)";
}
else if (degrees <= 300) {
(r = Math.floor(255 * (degrees/60)));
color = "rgb("+ r +", 0, 255)";
}
else if (degrees <= 360) {
(g = Math.floor(255 / (degrees/60)));
color = "rgb(255, "+ g +", 0)";
}
}
让我们来看看你的最后一个区块。它被称为 degrees <= 300
else
,所以我们知道至少degrees
是 301。为了便于计算,我们将其称为 300。
g = Math.floor(255 / (degrees / 60));
这会导致255 / (300 / 60) = 255 / 5 = 51
- 这不是您所期望的,因为平滑过渡它应该从 255 到 0(或 0 到 255)。
这样做的原因是,您的degrees / 60
应该从0
过渡到1
,它只在第一步中这样做。尝试(degrees - 300) / 60
,因为这符合范围。
您还会注意到,为了平稳过渡,您需要使用255 * (1-(degrees-300)/60)
但是,当您可以这样做时,所有这些都没有意义:
color = "hsl("+degrees+"deg, 100%, 50%)";