私はサンキーチャートを実装しました。チャートを通してノードパスをトレースする機能があります。しかしながら、機能が立っているので、ユーザは、ノードのパスのハイライトを強調表示および除去するノードをmouseenter
に持たなければならない。マウスセンターでノードのパスを強調表示し、そのハイライトを削除するには、どのような方法が良いですか(不透明度の変更によって)mouseout
? Btw私はちょうどmouseenter
とmouseout
の組み合わせを使用するための関数を呼び出そうとしましたが、それは問題を解決するように見えませんでした。ここに私のコードは次のとおりです。Mouseeventをより効率的に処理する方法
function highlightNodeLinks(node, i) {
var remainingNodes = [],
nextNodes = [],
strokeOpacity = 0,
traverse;
if (d3.select(this).attr('data-hover') === '1') {
d3.select(this).attr('data-hover', '0');
strokeOpacity = 0.2;
} else {
d3.select(this).attr('data-hover', '1');
strokeOpacity = 0.5;
}
traverse = [{
linkType : 'sourceLinks',
nodeType : 'target'
}, {
linkType : 'targetLinks',
nodeType : 'source'
}];
traverse.forEach(function (step) {
node[step.linkType].forEach(function (link) {
remainingNodes.push(link[step.nodeType]);
highlightLink(link.id, strokeOpacity);
});
while (remainingNodes.length) {
nextNodes = [];
remainingNodes.forEach(function (node) {
node[step.linkType].forEach(function (link) {
nextNodes.push(link[step.nodeType]);
highlightLink(link.id, strokeOpacity);
});
});
remainingNodes = nextNodes;
}
});
}
function highlightLink(id, opacity) {
d3.select('#link-' + id).style('stroke-opacity', opacity);
}
、ここでは、それが呼ばれる方法です:任意の配慮やアドバイスを事前に
.on('mouseover', highlightNodeLinks)
いつものように感謝します。
パス内のすべてのリンクのリストを事前計算してから、このリストを「ちょうど」反復してハイライトそれらをオンまたはオフにする?私はそれがあなたのために適している場合はいくつかのコードを与えることができます(むしろ重いメモリの負荷が、より速い) – tarulen
@ tarulenあなたが気にしないなら、私はあなたの提案を見たいと思います –
あなたはノードクラスを与えることができます:ホバー擬似適切なクラスで。 –