我可以从on("drag"...)
中访问d3.event.x
,但x
不存在于on("dragstart"...)
中;为什么?我怎么才能用另一种方式表达呢,最好不要太粗俗?
检查这个示例的控制台输出:
d3.select("body").append("svg").append("rect")
.attr("width", 100)
.attr("height", 100)
.style("color", "black")
.call(
d3.behavior.drag()
.on("dragstart", function(){
console.log(d3.event);
})
.on("drag", function(){
console.log(d3.event);
})
.on("dragend", function(){
console.log(d3.event);
})
);
JSFiddle
@Lars解释了为什么,那么你怎么做呢?d3。鼠标很灵巧:
d3.behavior.drag()
.on("dragstart", function(){
console.log('relative to rect: ' + d3.mouse(this));
console.log('relative to body: ' + d3.mouse(d3.select("body").node()));
})
更新例子。
这是预期的行为(参见文档):
拖动事件(但不包括dragstart和dragend事件)暴露"x"one_answers"y"属性,表示拖动手势在本地坐标中的当前位置。
开始和结束事件在实际拖动发生之前和之后触发,即与第一个和最后一个drag
事件相比,没有坐标变化。