Javascript d3拖动行为:在拖动名称空间中注册、侦听和触发不同的类型?
键入Javascript d3拖动行为:在拖动名称空间中注册、侦听和触发不同的类型?,javascript,d3.js,Javascript,D3.js,键入d3.behavior.drag()让我感到困惑。我想指定拖动类型,以便不同的对象触发不同的拖动事件。我习惯于使用D3 dispatches/namespaces编程,执行以下操作: 向D3分派对象注册它们 然后使用类似于.on('click.typeHere')的方法侦听分派事件 并使用dispatch.typeHere()触发事件 我搞不清楚正常的调度过程是如何应用于拖动行为的。例如: var svg=d3.select('svg').append('g')) .attr('trans
d3.behavior.drag()
让我感到困惑。我想指定拖动类型,以便不同的对象触发不同的拖动事件。我习惯于使用D3 dispatches/namespaces编程,执行以下操作:
.on('click.typeHere')
的方法侦听分派事件dispatch.typeHere()
触发事件李>
我搞不清楚正常的调度过程是如何应用于拖动行为的。例如:
var svg=d3.select('svg').append('g'))
.attr('transform','translate(0,20)');
append('rect')
.attr('height',50)
.attr('width',20)
.样式(“填充”、“钢蓝”);
var drag=d3.behavior.drag();
drag.on('drag',function(){
log('drag');
}).on('drag.type',function(){
log('namespace active');
}).on('drag.type2',function(){
log('namespace2active');
});
append('circle')
.attr('cx',20)
.attr('cy',0)
.attr('r',10)
.style('填充','橙色')
.呼叫(拖动)代码>
我会对不同类型的对象使用不同的拖动行为,相应的拖动处理程序会执行相应的操作。这将使您无需再处理事件名称空间:
var drag1 = d3.behavior.drag()
.on('drag', function() {
console.log('drag rect');
});
svg.append('rect').call(drag1);
var drag = d3.behavior.drag()
.on('drag', function() {
console.log('drag circle');
});
svg.append('circle').call(drag);
完成演示。我会将不同的拖动行为附加到不同类型的对象上。对于每一个对象,您都可以有一个单独的drag
处理程序来执行相应的操作。我之前尝试声明了多个d3.behavior.drag
对象,但我自动定义的所有类型都被提升到全局d3命名空间。例如,在上面的示例中,type
和type2
将在单独的拖动实例中,但这两个实例仍将在所有拖动中触发,而不管对象的所谓拖动实例是什么。如果有帮助的话,我可以把它添加到示例代码中。我的意思是,奇怪,我可以发誓我以前也做过同样的事情。如果您想粘贴JSFIDLE作为答案,我将接受它。谢谢