0

我正在做我的第一个动力学JS项目;我必须在画布上拖动一些形状,同时,我必须在页面上的某处实时写入形状的坐标。为了做到这一点,我在图层上使用事件“dragmove”,如下所示:

layer.on("dragmove",function(evt) {//detect shape and write stuff});

我使用“targetNode”来捕捉点击的形状。问题是这样的:如果我在不属于任何组的形状上使用 targetNode,一切正常,但如果必须移动的节点是组的一部分,则 targetNode 只在第一次工作,然后返回一个未定义的值之后的所有时间(dragmove 通常需要一些时间,不像 dragstart 或 click)。

我做了一个小提琴,所以你可以看到我在说什么:

http://jsfiddle.net/UScmU/

2个矩形在一个组中。如果你点击一个形状,一个警报会返回它的名字,如果你拖动圆圈或矩形,控制台上会写上形状的名字。

我会很感激一些帮助。对不起我的英语,我也希望文字是可以理解的。

4

1 回答 1

0

由于某种原因evt.targetNode,只定义了第一次调用dragmove然后它变成未定义,您可以通过执行以下操作来查看:

layer.on("dragmove",function(evt) {
  console.log(evt.targetNode);
  console.log(evt.targetNode.getName()+"");
});

相反,请尝试var nodo在事件函数之外使用定义,然后设置nodo = evt.targetNodemousedown.

var nodo;
layer.on('mousedown', function(evt) {
    nodo = evt.targetNode;
});
layer.on("click", function (evt) {
    console.log(nodo.getName() + "");
});
layer.on("dragmove", function (evt) {
    console.log(nodo.getName() + "");
});

JSFIDDLE

于 2013-09-13T17:49:36.187 回答