我可以从d3.event.x内部访问on("drag"...),但是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.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

07-24 09:38
查看更多