此代码非常完美 - 除了 Internet Explorer 11 。
deleteNode(d)
仅在mousedown
句柄被注释掉时才会调用。
circle.enter().append('circle')
.on('contextmenu', function (d) {
deleteNode(d);
})
.on('mousedown', function (d) {
setNode(d);
});
这就是为什么我尝试用mousedown
抓住右键,但仍会显示上下文菜单。
circle.enter().append('circle')
.on('mousedown', function (d) {
d3.event.preventDefault();
if (d3.event.which == 3) {
deleteNode(d);
}
setNode(d);
});
如何修复不显示上下文菜单或同时捕获contextmenu
和mousedown
个事件?
答案 0 :(得分:4)
您已接近自己的问题解决方案。所有需要的东西已经存在,你只需要重新安排一下:
7:30PM
这适用于IE11以及FF和Chrome。
顺便说一句,请注意circle.enter().append("circle")
.on("contextmenu", function(d) {
d3.event.preventDefault();
})
.on("mousedown", function (d) {
if (d3.event.which == 3) {
deleteNode(d); // <-- d probably needs to be replaced
} else {
setNode(d); // <-- d probably needs to be replaced
}
});
是指绑定到节点的数据,而不是节点本身。在事件内,侦听器d
将引用当前节点。
this
var svg = d3.select("svg");
svg.append("circle")
.attr({
"cx": 100,
"cy": 100,
"r": 100
})
.on("contextmenu", function(e) {
d3.event.preventDefault();
})
.on("mousedown", function (e) {
if (d3.event.which == 3) {
//console.log("deleteNode(d)");
} else {
//console.log("setNode(d)");
}
});