5

我正在使用 Raphael JS 2.0 并想模拟对另一个元素的拖动结束,然后删除正在处理的当前元素。如果它可以使用 jquery 来完成,那也很棒。

像这样的东西:

var child = currentShift.data('endChild');
var newX = child.attr('x');
if (this !== currentShift)
{
    newX = child.attr('x')-day;
}
currentShift.attr({y: child.attr('y'), x: newX, height: child.attr('height')});
$(currentShift.node).mouseup();
child.remove();

我收到错误,因为子元素this位于拖动的“移动”部分。但它被用来与currentShift.

我知道还有其他一些方法可以获得类似的效果,但我想知道是否有某种方法可以模拟任意元素的拖动端。

4

1 回答 1

1

看起来您可以使用对拖动结束函数的引用(在我的情况下up),call()只需将引用(在我的情况下currentShift)传递给您的 Raphael JS 元素。我的代码现在看起来像这样:

var child = currentShift.data('endChild');
var newX = child.attr('x');
if (this!==currentShift)
{
    newX = child.attr('x')-day;
}
currentShift.attr({y: child.attr('y'), x: newX, height: child.attr('height')});
if (this !== currentShift)
    up.call(child);
else
    up.call(currentShift);
child.remove();

这仍然不是我想要的,因为如果用户一直按住鼠标,即使在元素被删除后它也会尝试调用我的拖动移动函数(即它实际上并没有强制拖动事件停止,它只是调用 up 事件,然后给出很多非致命错误,因为在尝试调用 move 函数时元素不再存在。)

如果有人可以在接下来的几天内提供有关如何强制结束拖动的答案(因此不再调用 move 函数),即使用户继续按住鼠标,我也会接受该答案。否则,我只会接受这个。

于 2012-10-20T00:24:43.063 回答