1

我有一个颜色选择器,返回的色调值是介于 0 和 1 之间的数字。为了创建色调的变化,我添加 0.2 表示 20%,0.8 表示 80% 等。

我怎样才能让数字绕着圆圈旋转,这样当数字超过 1 时,它会减去 1。我怎样才能使这个数字变成这个数字:1.73540012511 ---> .7354

我尝试使用“美分”javascript(http://www.irt.org/script/6.htm),但这返回的值大于 1:http: //jsfiddle.net/Se9Dn/

我不能使用 Math.min,因为我希望 1.2 变为 .2(不要让颜色在达到 1 时全部变为红色)。

谢谢。:)


编辑: 确认解决方案,添加四舍五入。假设您有一个从 Farbtastic 返回的 HSL 颜色(色相、饱和度、亮度),并且想要以数学方式调整色相:

hslcolor  = (.73802938, .59832908, .948987);
colorStep = .2;
newcolor[0] = Math.round ( ((1*colorStep +hslcolor[0])%1)*10000 ) /10000;

当心那些括号在那里非常棘手。

4

2 回答 2

5

您可以使用模运算符%( MDN docu )。

因此,对于添加,例如0.8

result = (result + 0.8) % 1;

编辑

JavaScript 的模运算符实际上更像是一个余数运算符。

引用ECMAScript 规范第 5.2 节

符号“x modulo y”(y 必须是有限且非零)计算与 y(或零)符号相同的值 k,使得 abs(k) < abs(y) 并且 x−k = q × y 对于某些整数q。

于 2012-08-10T12:00:05.467 回答
1

你只需减去整数:

function cent(amount) { return (+amount) - Math.floor(+amount); }

如果数字可以是负数,那么它取决于您想要的语义。我会把它作为练习:-)

于 2012-08-10T12:01:47.297 回答