D3.js d3事件目标
有没有一种方法可以不使用D3.js d3事件目标,d3.js,D3.js,有没有一种方法可以不使用this访问事件目标(DOM元素)?我在一个对象中,我希望这个绑定到对象本身。全局d3.event显然不存储目标-d3.event.target不工作。有线索吗 编辑:这是我正在运行的代码(它是coffeescript): 浏览器控制台输出为 function e(){this.on("mousedown.drag",t).on("touchstart.drag",t)} 如果我添加一个调试器语句并手动检查对象,也是一样的。出于某种原因,d3.event.target
this
访问事件目标(DOM元素)?我在一个对象中,我希望这个
绑定到对象本身。全局d3.event
显然不存储目标-d3.event.target
不工作。有线索吗
编辑:这是我正在运行的代码(它是coffeescript):
浏览器控制台输出为
function e(){this.on("mousedown.drag",t).on("touchstart.drag",t)}
如果我添加一个
调试器
语句并手动检查对象,也是一样的。出于某种原因,d3.event.target
返回一个函数而不是事件对象。我可以重新创建它,我很想把它作为一个bug记录下来-我认为将拖动控件本身作为d3.event.target
传递没有任何用处
在这种情况下,修复似乎很容易-只需调用rect
选项上的拖动行为即可:
@rect = @nodes.append('svg:rect')
.attr('width', @x 100)
.attr('height', @y 50)
node_drag = d3.behavior.drag().origin(Object).on('drag', @drag_move)
@rect.call node_drag
但是,如果您的节点组中有多个元素,并且想要了解哪个元素正在被拖动,我会觉得这很烦人。我通过在dragmove函数中重置d3.event.target的值来解决这个问题: d3.event.target=event.target
然后d3.event.target成为像drag()这样的函数的目标DOM元素instand…我成功地使用了
d3.event.target
-你能在它不起作用的地方发布这个示例吗?
@rect = @nodes.append('svg:rect')
.attr('width', @x 100)
.attr('height', @y 50)
node_drag = d3.behavior.drag().origin(Object).on('drag', @drag_move)
@rect.call node_drag