我可以确认我对以下代码中发生的事情的理解吗?d3插值示例解释
var color = d3.scale.linear()
.range(["hsl(-180,50%,50%)", "hsl(180,50%,50%)"])
.interpolate(interpolateHsl);
我们定义称为颜色缩放功能(不知道为什么我们能够定义一个变量的函数,但我已经学会了接受这一点 - 澄清将是有益的)。
没有指定域,因为使用.interpolate()只能在0和1之间的域中使用?或者因为在这种情况下域==范围?还是其他原因?
从插值函数调用interpolateHsl需要范围(a和b)的开始点和结束点的'隐式参数'(无需指定 - 它们是否称为隐式参数或其他参考?)。
function interpolateHsl(a, b) {
var i = d3.interpolateString(a, b);
return function(t) {
return d3.hsl(i(t));
}
}
现在我们定义interpolateHsl内FN插值是插值串 - 我认为这将需要说[“宋体12px的”,“宋体24px的”],挖出的数字部分和内插在那,然后重新加入文本元素?那么在这种情况下,它会从hsl字符串中提取数字分量并插入这些分量?
现在(如果它还不够),它会变得非常混乱。
t是'增量' - 所以如果总插值时间是5000ms,并且我们有5个离散的范围,那么t = 1000ms?所以在连续的情况下,它只是非常小? (t)将在'时间't计算内插值,然后通过d3.hsl()将其转换为真正的hsl值而不仅仅是一个字符串表示。
为什么这必须在函数内的函数中?要访问t?大致说来,我的理解是不完整的,所以对于发生什么事情的更广泛的解释会非常有帮助。
确定1-5,谢谢。第6点我不追随。我无法追踪传递过来的d.value,以便了解发生了什么事 ,可能是因为d3在“幕后”做了很多工作。 d3.scale.linear()有效地“解压”了一个函数?如果我运行console.log(color),我会看到'function scale(x)', 这不会清除任何东西。每当使用颜色(d.value)时,是否调用interpolateHsl?或者当您建立颜色时只执行一次的 ? 我相信你的解释是非常彻底的,但看到发生了什么将是有益的。然而,在这里我没有使用console.log()。 – hwilson1
好的不,我认为我的问题在关于您关联的关闭教程中得到了回答。再次感谢。 – hwilson1