我正在研究D3中的力指向图。我想通过将所有其他节点和链接设置为较低的不透明度来突出显示mouseover'd节点,其链接及其子节点。在D3强制指示图中突出显示所选节点,其链接及其子节点
在这个例子中,我可以淡出所有的链接和节点,然后淡入连接的链接,但到目前为止,我还没有能够优雅地淡入所有连接的孩子节点当前鼠标悬停的节点。
这是从代码中键功能:
function fade(opacity) {
return function(d, i) {
//fade all elements
svg.selectAll("circle, line").style("opacity", opacity);
var associated_links = svg.selectAll("line").filter(function(d) {
return d.source.index == i || d.target.index == i;
}).each(function(dLink, iLink) {
//unfade links and nodes connected to the current node
d3.select(this).style("opacity", 1);
//THE FOLLOWING CAUSES: Uncaught TypeError: Cannot call method 'setProperty' of undefined
d3.select(dLink.source).style("opacity", 1);
d3.select(dLink.target).style("opacity", 1);
});
};
}
我得到一个Uncaught TypeError: Cannot call method 'setProperty' of undefined
错误,当我尝试设置不透明度我从source.target加载的元件上。我怀疑这不是正确的方式来加载该节点作为D3对象,但我找不到另一种方式来加载它,而无需再次遍历所有的节点,以找到匹配链接的目标或来源的节点。为了保持性能合理,我不想在所有节点上遍历所有节点。
我把褪色的链接的例子来自http://mbostock.github.com/d3/ex/chord.html:
但是,这并不表明如何改变所连接的子节点。
如何解决或改善这个有什么好建议,将奋力upvoted :)
这很有用@mbostock,非常感谢你:D我用你的解决方案更新了[jsfiddle](http://jsfiddle.net/xReHA/1/)。 – 2012-01-09 07:46:38
在链接中删除了不必要的样式调用:http://jsfiddle.net/xReHA/2/ – 2012-01-09 08:08:44
Mike,该解决方案非常美丽。只是在说'。 – Vivek 2012-07-11 20:04:08