我有很多簡單的視覺效果,超過100我會說。出於美學目的,我想在鼠標點擊時創建高光效果。我也想通過一旦用戶點擊一個新的矩形來消除這種效果,使這種效果有點直觀。然而,如果沒有訴諸d3.selectAll()
的呼叫,我就無法實現這個目標,所以我認爲如果這個項目變得更大,這種方法可能並不理想。下面是代碼:D3選擇亮點(效率?)
.on('click.highlight', function() {
//set any previously highlighted rects back to normal color/brightness
d3.selectAll('.highlight').transition().duration(250)
.style('fill', function(d) { return d3.rgb(d.color)})
d3.select(this).classed('highlight',true);
//now it's safe to assign the current highlighted rect a brighter hue... i think
d3.select(this).transition().duration(250)
.style('fill', function(d) { return d3.rgb(d.color).brighter(.5)})
})
雖然這段代碼做什麼,我想它做的事,但據推測有可能永遠只能是1個highlight
RECT擔心在任何給定的時間。所以再次,我不確定在這裏使用d3.selectAll()
是必要的。
那麼無論如何,有沒有更高效的方法?如果可能的話,我想將它全部保存在一個.on('click')
函數中。
我所做的唯一更改是限制選擇。而不是使用'd3.selectAll',使用'rect'的現有父選擇。像'g'或'svg'這樣的東西都屬於它們。這限制了底層查詢選擇器從搜索整個文檔。 – Mark
爲什麼不保留突出顯示的矩形的外部引用? https://jsfiddle.net/k9qz8jg7/沒有必要擺弄類和重新選擇。 – altocumulus
Arash,儘管這個問題在SO中不是完全* off-topic *,因爲你有一個**工作代碼**,並且你正在尋求關於**最佳實踐**和**效率**的建議,你應該考慮開始使用代碼審查:https://codereview.stackexchange.com/ –