使用d3拖动,为什么没有设置d3.event.x?

时间:2015-07-23 17:08:02

标签: javascript d3.js

我可以从d3.event.x内部访问on("drag"...),但xon("dragstart"...)不存在;为什么?我怎么能以另一种方式得到它,最好不是非常hackish?

检查此示例的控制台输出:

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

2 个答案:

答案 0 :(得分:2)

这是预期的行为(见the documentation):

  

拖动事件(但不是dragstart和dragend事件)公开" x"和" y"表示当地坐标中拖动手势的当前位置的属性。

在实际拖动发生之前和之后触发开​​始和结束事件,即与第一个和最后一个drag事件相比没有坐标变化。

答案 1 :(得分:2)

@Lars解释了原因,那你怎么做的? d3.mouse很漂亮:

    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()));
        })

更新了example