我可以確認我對以下代碼中發生的事情的理解嗎?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