私は、100を超える多くの矩形の単純なビジュアルを持っています。審美的な目的のために、私はマウスクリックで高い照明効果を作りたいと思っています。私はまた、ユーザーが新しい矩形をクリックするとその効果を取り除くことによって、この効果をやや直感的にしたいと思っていました。しかし、私はd3.selectAll()
コールに頼らずにこれを動作させることができませんでしたので、このプロジェクトがより大きくなるなら、このアプローチが理想的ではないかもしれないと思っています。このコードは、私はそれがやりたいことないが、おそらく唯一のこれまでの任意の時間を与えるのを心配する1つの他のhighlight
矩形があるかもしれませんけれども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)})
})
:ここではコードです。もう一度、私はd3.selectAll()
を使用していることをここで保証していません。
とにかく、より効率的な方法がありますか?可能であれば、私はそれをすべて.on('click')
の機能の中にとどめたいと思います。
唯一の変更は、選択を制限することです。 'd3.selectAll'の代わりに、' rect'の既存の親の選択を使用してください。 'g'や' svg'のようなものがあります。これは、基礎となるクエリーセレクタがドキュメント全体を検索するのを制限します。 – Mark
強調表示された矩形の外側参照を保持しないのはなぜですか? https://jsfiddle.net/k9qz8jg7/クラスを練習して再選択する必要はありません。 – altocumulus
Arash、あなたが**作業コード**を持っていて、**ベストプラクティス**と**効率性**に関するアドバイスを求めているので、この質問はまったく*オフトピック*ではありません。 Code Reviewの使用を検討してください:https://codereview.stackexchange.com/ –