3

我正在尝试解码我​​在 Raphael.js 的源代码中找到的这段代码(它从 HSL 颜色转换为 RGB 颜色,这只是函数的一部分):

var R, G, B, X, C;
h = (h % 360) / 60;
C = 2 * s * (l < .5 ? l : 1 - l);
X = C * (1 - abs(h % 2 - 1));
R = G = B = l - C / 2;

h = ~~h;
R += [C, X, 0, 0, X, C][h];
G += [X, C, C, X, 0, 0][h];
B += [0, 0, X, C, C, X][h];

现在,我知道是什么h = ~~h(基本上是一个有一些关键差异的数字),但我无法弄清楚这意味着什么:

R += [C, X, 0, 0, X, C][h];

为什么他要创建一个数组然后引用[h]它?他是否从一组值中找到变量h等于的值?(但如果他已经知道 ' 的价值,他为什么要这样做h?)我实际上从未见过这样的事情,如果是这样的话,我认为它非常聪明。

4

1 回答 1

2

h将是数组中的索引。这确实是一个有点复杂的代码,在这种情况下使用 switch 语句或类似的东西可能会更清楚。h是一个介于 0 和 5 之间的数字(模 360,除以 60)。

于 2012-05-10T22:35:14.210 回答