当鼠标离开SVG空间时,在鼠标上方突出显示节点会导致意外行为
d3 highlighting nodes on mouseover causes unexpected behaviour when mouse taken off of svg space
我写了一些代码,当用户在节点上"鼠标下移"时,突出显示(通过增加笔画宽度/改变笔画颜色)节点可视化(一些圆圈,一些矩形)和相关的链接/节点。当用户"上移鼠标"时,高亮显示就会消失。这一切都很好,除非处于单击状态的节点被拖出svg空间(从技术上讲,我已经将可视化约束到svg空间,但显然鼠标点没有受到约束)并释放。当鼠标按钮被释放时,高亮显示不会消失。
jsfiddle here - http://jsfiddle.net/hiwilson1/bga0wcLL/.
我选择的完成高亮显示的方法是操作与所单击的可视化节点相关联的底层对象,然后更新可视化,这些都在下面的onmousedown/onmouseup事件函数中处理:
function highlight(d) {
if (event.type == "mousedown") {
d.highlight = 1;
d.associatedLinks.forEach(function(link, i) {
link.highlight = 1;
link.source.highlight = 1;
link.target.highlight = 1;
})
}
else {
d.highlight = 0;
d.associatedLinks.forEach(function(link, i) {
link.highlight = 0;
link.source.highlight = 0;
link.target.highlight = 0;
})
}
svg.selectAll(".node .shape")
.attr("stroke", function(d) { if (d.highlight == 1) { return "Black"}})
.attr("stroke-width", function(d) { return (d.highlight == 1) ? 3 : 1 });
svg.selectAll(".link")
.attr("stroke", function(d) { return (d.highlight == 1) ? "Black" : "Grey" })
.attr("stroke-width", function(d) { return (d.highlight == 1) ? 3 : 1 });
}
您可以侦听mousemove
事件并在此之后做出假设。在highlight
函数中,您将设置lastHighlightedNode
。
lastHighlightedNode = null;
var svg = d3.select("body").append("svg")
.attr("width", w)
.attr("height", h);
d3.select("body").on('mousemove', function () {
if ((d3.mouse(document.getElementsByTagName('svg')[0])[0] == 0 || d3.mouse(document.getElementsByTagName('svg')[0])[1] == 0) && lastHighlightedNode != null) {
highlight(lastHighlightedNode);
};
});
.....
function highlight(d) {
lastHighlightedNode = d;
....
演示:http://jsfiddle.net/bga0wcLL/1/
相关文章:
- 当我在节点上拖动鼠标时,我如何防止使用d3.ehavior.zoom().on(“缩放”,重绘)
- vis.js:如何用鼠标点击来展开/折叠节点
- 如何在D3Javascript中将鼠标移动到节点上时显示和隐藏节点
- 节点 JS 和鼠标
- Arbor js - 将鼠标移到节点上时,将节点 ID 显示为文本
- 如何在 D3 中创建工具提示,以便在图形中节点上的鼠标悬停上获取图像
- 如何在 Arbor js 中将鼠标悬停在节点上时显示节点的标签
- 在鼠标光标的位置添加细胞景观节点
- 如何通过按钮单击和鼠标悬停/鼠标退出显示和隐藏节点文本?D3/JS.
- 鼠标悬停UL子节点不正确
- 如何在D3中模拟鼠标移动,这样当你拖动节点时,其他节点会自动移动
- ExtJS TreeGrid's节点鼠标悬停事件
- 鼠标移到d3.js中链接和节点的事件上应该显示文本
- 当鼠标移动到快速时,HTML节点失去鼠标移动事件
- 显示相对于鼠标位置的本地DOM子节点
- 带子节点的鼠标悬停
- 在sgma.js中将鼠标移到节点上时将其大小加倍
- 如何显示文本时,鼠标悬停在一个节点在D3强制布局
- 当移动出包含的圆圈或文本时,将触发D3强制元素(节点)鼠标移出
- 当鼠标离开SVG空间时,在鼠标上方突出显示节点会导致意外行为