D3.js 在D3JS中如何区分鼠标单击和双击同一节点元素
需要进行两种不同的操作,一种用于单击,另一种用于双击。单击可以工作,但对于双击,它将转到单击功能,然后转到双击功能。如何在双击发生时停止单击功能触发,或者如何捕获事件类型single或double。请提供帮助 根据这个例子,我正在使用如下所示..这是正确的方法吗D3.js 在D3JS中如何区分鼠标单击和双击同一节点元素,d3.js,D3.js,需要进行两种不同的操作,一种用于单击,另一种用于双击。单击可以工作,但对于双击,它将转到单击功能,然后转到双击功能。如何在双击发生时停止单击功能触发,或者如何捕获事件类型single或double。请提供帮助 根据这个例子,我正在使用如下所示..这是正确的方法吗 var nodeEnter = node.enter() .append("g") .attr("class","
var nodeEnter = node.enter()
.append("g")
.attr("class","node")
.attr("transform", function(d) {
return "translate(" + source.x0 + "," + (-(source.y0)) + ")";
}).on('click', click);
function click{
var cc = clickcancel();
cc.on('click', function() {
addDetailsDiv(d.id, d.name, d.type);
});
cc.on('dblclick', function() {
dblclick();
});
我也遇到了同样的问题,我找到了一个解决方案,该解决方案至少适用于API的v3。解决方案的要点是,如果第二次鼠标单击在某个时间(本例中为300毫秒)之前到达,则向上/向下捕捉鼠标,并发出
dblclick
事件,否则将发出click
事件:
d3Utils.js
}
index.js
上面的事情已经完成了。问题是当你双击的时候。首先它会转到foo,然后是bar,但我需要我应该直接转到bara,在我完成了一点研究之后。我把这个函数应用到一个快速的例子中,它是有效的…但必须有一个更简单的方法。我也无法打开Lars提供的示例…我认为Github遇到了问题。在这里,具有正确数据绑定的修改版本
d3。在v4中已删除重新绑定
,因此上面的示例不起作用。有人有v4的工作示例吗?你们看到了吗?嗨,拉尔斯。你们提到的页面没有打开!!!!嗯,现在好像坏了。给它几分钟:)现在它打开了,检查一下它可能的副本
someSelection
...
.on("click", foo)
.on("dblclick", bar)
const d3 = require('d3')
module.exports = {
// Get a function that dispatches 'click' and 'dblclick' events for a D3 selection
getClickDispatcher: () => {
const clickEvent = d3.dispatch('click', 'dblclick')
return d3.rebind((selection) => {
let waitForDouble = null
// Register click handler on selection, that issues click and dblclick as appropriate
selection.on('click', (projectProxy) => {
d3.event.preventDefault()
if (waitForDouble != null) {
clearTimeout(waitForDouble)
waitForDouble = null
clickEvent.dblclick(d3.event, projectProxy)
} else {
const currentEvent = d3.event
waitForDouble = setTimeout(() => {
clickEvent.click(currentEvent, projectProxy)
waitForDouble = null
}, 300)
}
}
})
}, clickEvent, 'on')
},
const {getClickDispatcher,} = require('./d3Utils')
const clickDispatcher = getClickDispatcher()
.on('click', () => {
console.log('A single click was detected')
})
.on('dblclick', () => {
console.log('A double click was detected')
})
// Hook up clickDispatcher
d3.select('.node')
.call(clickDispatcher)