1
我試圖重置組的位置,如果它沒有在拖放區中拖動。dragended事件中的重置位置
它可以工作,但是當我第二次嘗試拖動它時,組會先移回它被拖動的位置。
我認爲它與原點有關。
這裏是我的代碼和fiddle
function init(){
var drag = d3.behavior.drag()
.origin(function (d) { return d; })
.on("dragstart", dragstarted)
.on("drag", dragged)
.on("dragend", dragended);
entities = svg.selectAll("g")
.data([{ x: 750, y: 100 }])
.enter()
.append("g")
.attr("class","entity-group")
.attr("transform", function (d) { return "translate(" + d.x + "," + d.y + ")"; })
.attr("initial-x", function (d) { return d.x })
.attr("initial-y", function (d) { return d.y })
.call(drag);
}
function dragstarted(d) {
d3.event.sourceEvent.stopPropagation();
d3.select(this)
.classed("dragging", true);
}
function dragged(d) {
d.x += d3.event.dx;
d.y += d3.event.dy;
d3.select(this)
.attr("transform", function (d) { return "translate(" + d.x + "," + d.y + ")" });
}
function dragended(d) {
d3.select(this)
.classed("dragging", false);
if (d.x > dropzoneWidth) {
var entity = d3.select(this);
var x = entity.attr("initial-x");
var y = entity.attr("initial-y");
entity.attr("transform", function (d) { return "translate(" + x + "," + y + ")"; });
}
}
我也試過這種
d3.behavior.drag()
.origin(function (d) {
var t = d3.select(this);
return {
x: d3.transform(t.attr("transform")).translate[0],
y: d3.transform(t.attr("transform")).translate[1]
};
})
謝謝!這是有道理的,但它使左上角跳轉到鼠標。這裏是一個小提琴http://jsfiddle.net/t67onzog/3/ – Marc
有沒有一種方法來重置拖放功能中的d.x和d.y dragended? – Marc
@Marc問題是它通過平移(這是左上角)來設置'g'的位置。你想通過'g'拖動鼠標在rect中的位置:http://jsfiddle.net/t67onzog/4/ – Mark