我创建了一个新的jQuery元素后鼠标处于向下位置,并在释放之前。 (后鼠标按下)。
我想以编程方式触发dragging
使用jQuery UI的新元素,所以它就会自动开始与我的鼠标移动拖动。 我不希望有释放,然后再次单击鼠标。
我曾尝试以下...
var element = $("<div />");
element.appendTo("body").draggable().trigger("mousedown");
......然而,这是行不通的。
有没有人对如何做到这一点有什么建议?
更新:经过一番搜索的海报这个问题有相同的问题。 但是建议的解决方案,这可以归结为...
$("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);
}
});
这里的plunker
我的例子使用已经存在的,而不是创建一个元素,但它应该工作类似。
可拖动的插件预计其MouseDown事件中,利用其命名空间和指向拖动对象作为目标。 修改事件这些领域使用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);
});
这里演示: http://jsfiddle.net/maCmB/1/
创建鼠标悬停您可拖动功能
$('#futureDragableElement').mouseover(function() {
$(this).draggable();
});
由于可拖动的初始化已经完成,你的第一个鼠标点击将被考虑
你必须MouseDown事件绑定到有问题的元素,那么你就可以触发事件。
从http://api.jquery.com/trigger/
当相应的事件发生时附接有.bind()或它的快捷方式的方法之一任何事件处理程序被触发。 他们可以手动但是被解雇,与.trigger()方法。 到.trigger()的调用执行,他们将是,如果事件是由用户触发自然顺序相同的处理程序:
$('#foo').bind('click', function() {
alert($(this).text());
});
$('#foo').trigger('click');
如果您正在创建活动中的元素不需要黑客和该元素是不是太复杂。 你可以简单地设置拖动到的mousedown发生,并且使用可拖动的辅助属性来创建将是您的新元素的辅助元素。 在dragStop克隆帮手要在DOM中的位置。
$('body').draggable({
helper: function() {
return '<div>your newly created element being dragged</div>';
},
stop: function (e,ui) {
ui.helper.clone().appendTo('body');
}
});
当然,你需要设置位置的帮手,让鼠标就可以了。 这只是一个非常简单的例子。