拖动后运行函数?

时间:2015-08-11 03:37:41

标签: javascript d3.js

我正在尝试在程序中发生拖动后运行一段代码。我原以为以下方法可行:

//behavior for a dragged point
    var drag = d3.behavior.drag()
        .origin(function (d) {
            return d;
        })
        .on("drag", dragmove);

    function dragmove(d) {
        d3.select(this).attr("transform", "translate(" + (d.x = d3.event.x) + "," + (d.y = d3.event.y) + ")");

        //events to update line to fit dots
        updateXs();
        updateLineData();

        //update line
        d3.select(".myLine").transition()
            .attr("d", lineFunc(lineData));

    }

但是看到它运行之后,我认为阻塞正在运行,而拖动正在发生并且对象正在移动,这可能导致它无法正常工作。我想要找到的是处理完全拖动后应该运行的代码的正确方法。如果有一种方法可以在拖动点的同时更新线,那将非常酷且首选,但我不介意在拖动完成后执行它。

这是完整的代码: https://jsfiddle.net/cuhwvj8t/4/

1 个答案:

答案 0 :(得分:1)

要在拖动完成后执行某些代码,您应该使用dragend事件。所以你要使用:

var drag = d3.behavior.drag()
             .on("dragend", function(d) { 
                 // Update lines
             });

但是,您应该可以使用已经连接到的drag事件在拖动过程中更新线条:

var drag = d3.behavior.drag()
             .on("drag", function(d) { 
                 // Update lines
             });