我在鼠标处于向下位置之后,松开鼠标之前,创建了一个新的jQuery元素。(鼠标按下后)。
我想使用jQuery UI以编程方式在新元素上触发dragging
,这样它就会随着我的鼠标移动自动开始拖动。我不想在松开鼠标后再点击一次。
我已经尝试了以下几种方法。
var element = $("<div />");
element.appendTo("body").draggable().trigger("mousedown");
...however这不起作用。
有没有人对如何做到这一点有什么建议?
更新:在搜索this question的海报后也有同样的问题。然而,建议的解决方案归根结底是...
$("body").on("mousedown", function(e) {
$("<div />").draggable().appendTo("body").trigger(e);
});
...no不再适用于最新版本的jQuery和jQuery-UI,而是生成一个超过最大调用堆栈的错误。
发布于 2014-09-27 04:41:27
更新:
参见fuzzyBSc's answer below。这是正确的方法。
这完全是一个技巧,但它似乎做到了这一点:
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);
}
});
我的示例使用了一个已经存在的元素,而不是创建一个元素,但它的工作方式应该是类似的。
发布于 2014-07-02 13:27:53
draggable插件期望它的mousedown事件使用它的命名空间,并指向作为目标的draggable对象。在事件中修改这些字段适用于jQuery 1.8.3和jQuery UI 1.9.2。
$("body").on("mousedown", function(e) {
var div = $("<div />").draggable().appendTo("body");
e.type = "mousedown.draggable";
e.target = div[0];
div.trigger(e);
});
发布于 2012-12-15 23:59:19
在鼠标悬停时创建可拖动函数
$('#futureDragableElement').mouseover(function() {
$(this).draggable();
});
由于可拖动初始化已经完成,因此您的第一次鼠标单击将被考虑在内
https://stackoverflow.com/questions/13883214
复制相似问题