【发布时间】:2017-03-16 19:47:46
【问题描述】:
我正在尝试使用 d3 和 SVG 构建一个可拖动的对象。 “target”对象是一个 SVG G 元素,其中包含一个“rect”作为背景,SVG G 元素作为具有点击事件的子元素(如网格)。
我想丢弃距离起始拖动点的距离小于 11 的事件;因为“目标”对象的子对象在拖动距离太短时必须接收点击事件。
我试图在 'drag' 函数事件中返回 'true' 或 'false' 来控制该事件何时有效或无效;但它不起作用。
var x1 =0, y1 =0;
target.call(d3.drag()
.on("start", function () {
x1 =d3.event.x;
y1 =d3.event.y;
return true;
})
.on("drag", function () {
var x2 = d3.event.x;
var y2 = d3.event.y;
var x = x2 - x1;
var y = y2 - y1;
var d2 = x * x + y * y;
var distance = Math.sqrt(d2);
return distance > 10;
}).on("end", function () {
console.log("end");
})
);
现在,使用拖动,我发现了一个额外的问题: 单击时鼠标稍微移动会导致拖动事件而不是单击事件。
有什么方法可以在不执行“假”点击之类的操作的情况下解决问题?
【问题讨论】:
标签: javascript d3.js svg