在鼠标处于向下位置并在释放之前,我创建一个新的jQuery元素。 (mousedown之后)。
我想以编程方式触发使用jQuery UI拖动新元素,以便它会自动开始拖动鼠标移动。我不想要释放,然后再次单击鼠标。
我尝试过以下内容
var element = $("<div />");
element.appendTo("body").draggable().trigger("mousedown");
…但是这不行。
有没有人有任何建议如何实现这一点?
更新:经过一些搜索后,this question的海报有同样的问题。然而,建议的解决方案归结为…
$("body").on("mousedown",function(e) {
$("<div />").draggable().appendTo("body").trigger(e);
});
…不再适用于最新版本的jQuery和jQuery-UI,而是产生最大调用堆栈超出错误。
解决方法
这完全是一个黑客,但它似乎是诀窍:
var myDraggable = $('#mydraggable').draggable();
// Yeah... we're going to hack the widget
var widget = myDraggable.data('ui-draggable');
var clickEvent = null;
myDraggable.click(function(event){
if(!clickEvent){
widget._mouseStart(event);
clickEvent = event;
}
else {
widget._mouseUp(event);
clickEvent = null;
}
});
$(document).mousemove(function(event){
console.log(event);
if(clickEvent){
// We need to set this to our own clickEvent,otherwise
// it won't position correctly.
widget._mouseDownEvent = clickEvent;
widget._mouseMove(event);
}
});
Here’s the plunker
我的示例使用已经存在的元素,而不是创建一个元素,但它应该类似地工作。