如何在Raphael JS中模拟拖拽结束事件?

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进行交互。
我知道还有其他方法可以获得类似的效果,但我想知道是否有一种方法来模拟任意元素的拖动结束。

可能是 var child = currentShift.data().endChild; .... - zb'
@eicto,我不太明白你在建议什么。child元素已经被正确设置了。我真正想知道的是$(currentShift.node).mouseup();这一行。这一行并没有实际调用该元素的结束拖动事件,或者至少它给我带来了错误,而不是像我所期望的那样释放当前的Shift元素。 - keyneom
1个回答

1

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

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函数时给出了许多非致命错误,因为元素已经不存在了。)

如果有人能在接下来的几天内提供一个答案,告诉我如何强制结束拖动(即使用户继续按住鼠标),那么我将接受该答案。否则,我将接受这个。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接