我正在尝试在程序中发生拖动后运行一段代码。我原以为以下方法可行:
//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/
答案 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
});