【发布时间】:2015-08-02 02:13:04
【问题描述】:
我能否确认我对以下代码中发生的事情的理解?
var color = d3.scale.linear()
.range(["hsl(-180,50%,50%)", "hsl(180,50%,50%)"])
.interpolate(interpolateHsl);
我们正在定义一个称为颜色的缩放函数(不知道为什么我们能够将变量定义为函数,但我已经学会接受这一点 - 澄清会有所帮助)。
没有指定域,因为使用 .interpolate() 仅适用于 0 到 1 之间的域?还是因为在这种情况下 domain == range ?还是其他原因?
从 interpolate 函数调用 interpolateHsl 需要范围(a 和 b)的起点和终点的“隐式参数”(无需指定 - 它们称为隐式参数还是其他一些参考?)。
function interpolateHsl(a, b) {
var i = d3.interpolateString(a, b);
return function(t) {
return d3.hsl(i(t));
}
}
现在我们在 interpolateHsl 中定义一个插值 fn 来插值字符串 - 我认为会说 ['calibri 12px', 'calibri 24px'],取出数字部分并对其进行插值,然后将其重新加入文本元素?那么在这种情况下,它会从 hsl 字符串中提取出数字分量并对其进行插值?
现在(如果还不够的话)它变得非常混乱。
t 是“增量”——所以如果总插值时间是 5000 毫秒,并且我们有一个 5 步的离散范围,那么 t = 1000 毫秒?所以在连续的上下文中它只是非常小?
i(t) 将在“时间”t 计算插值,然后将其转换为真正的 hsl 值,而不仅仅是通过 d3.hsl() 的字符串表示。
为什么这必须在函数内的函数中?访问 t?
从广义上讲,我的理解是不完整的,因此对正在发生的事情进行更广泛的解释将非常有帮助。
【问题讨论】:
标签: javascript d3.js