如何使用d3.js拖动行为拖动svg组
How to drag an svg group using d3.js drag behavior?
我正在使用D3js拖动。单个元素被完全拖拽。但我想拖拽一组元素。如何做到这一点。这是我的Js小提琴链接:
function onDragDrop(dragHandler, dropHandler) {
var drag = d3.behavior.drag();
drag.on("drag", dragHandler)
.on("dragend", dropHandler);
return drag;
}
var g = d3.select("body").select("svg").append("g")
.data([{ x: 50, y: 50 }]);
g.append("rect")
.attr("width", 40)
.attr("height", 40)
.attr("stroke", "red")
.attr("fill","transparent")
.attr("x", function (d) { return d.x; })
.attr("y", function (d) { return d.y; })
.call(onDragDrop(dragmove, dropHandler));
g.append("text")
.text("Any Text")
.attr("x", function (d) { return d.x; })
.attr("y", function (d) { return d.y; })
.call(onDragDrop(dragmove, dropHandler));
function dropHandler(d) {
// alert('dropped');
}
function dragmove(d) {
d3.select(this)
.attr("x", d.x = d3.event.x)
.attr("y", d.y = d3.event.y);
}
我想同时拖动矩形和文本。这是我尝试过的,但运气不好。我想我错过了一些简单的东西。
首先,x
和y
属性(即:它们只是被忽略)。你可以用transform="translate(x,y)"
代替。
第二,您需要检查您在dragmove处理程序中获得的元素实际上是evt.target
和evt.currentTarget
来查看实际情况。target
是最初被击中的元素,currentTarget
是当前正在处理事件的事件目标(例如,如果事件冒泡,则为
For d3 v4:
var drag_this = d3.drag().subject(this)
.on('start',function (d) {
if (d.x1){
d.x1 = d3.event.x - d.xt;
d.y1 = d3.event.y - d.yt;
}else{
d.x1 = d3.event.x;
d.y1 = d3.event.y;
}
})
.on('drag',function(d){
d3.select(this)
.attr("transform", "translate(" + (d3.event.x - d.x1) + "," + (d3.event.y - d.y1) + ")");
d.xt = d3.event.x - d.x1;
d.yt = d3.event.y - d.y1;
});
my_group.call(drag_this);
假设您已经将数据绑定到组。
相关文章:
- 禁用SVG拖动
- 将SVG元素拖动到另一个SVG元素上
- 只能使用snap.svg在svg中拖动圆圈
- 微调可拖动 SVG 形状的位置,而无需更改 X
- 如何限制可拖动 SVG 形状的范围
- 通过可拖动的 SVG 形状设置 HTML 输入值 ?(或画布)
- 捕捉.svg拖动路径元素
- 避免在拖动时跳转带有文本锚点的 SVG 文本
- 使用 JqueryUI 拖动内联 SVG
- 沿路径捕捉.svg拖动
- 捕捉.svg拖动“真实”位置
- D3.js SVG 图像拖动有效,但引发许多类型错误
- 捕捉svg拖动一组集合
- Snap.svg沿着一条路径拖动一个组并保存位置
- 产卵,拖动SVG元素-方法
- 截取SVG拖动和缩放:我的矩形不会停止缩放
- 如何在svg.js中自定义拖动事件
- 如何使用d3.js拖动行为拖动svg组
- 使用Jquery-svg拖动SVG的初始位置
- d3.js占位符图形时拖动SVG元素