如何以编程方式调用jQuery UI的可拖动拖拽开始?(How to programmaticall

2019-07-05 08:23发布

我创建了一个新的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的作品,而是产生最大调用堆栈超出误差。

Answer 1:

这完全是一个黑客,但似乎这样的伎俩:

  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

我的例子使用已经存在的,而不是创建一个元素,但它应该工作类似。



Answer 2:

可拖动的插件预计其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/



Answer 3:

创建鼠标悬停您可拖动功能

$('#futureDragableElement').mouseover(function() {
  $(this).draggable();
});

由于可拖动的初始化已经完成,你的第一个鼠标点击将被考虑



Answer 4:

你必须MouseDown事件绑定到有问题的元素,那么你就可以触发事件。

从http://api.jquery.com/trigger/

当相应的事件发生时附接有.bind()或它的快捷方式的方法之一任何事件处理程序被触发。 他们可以手动但是被解雇,与.trigger()方法。 到.trigger()的调用执行,他们将是,如果事件是由用户触发自然顺序相同的处理程序:

$('#foo').bind('click', function() {
      alert($(this).text());
    });
    $('#foo').trigger('click');


Answer 5:

如果您正在创建活动中的元素不需要黑客和该元素是不是太复杂。 你可以简单地设置拖动到的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');
  }
});

当然,你需要设置位置的帮手,让鼠标就可以了。 这只是一个非常简单的例子。



文章来源: How to programmatically invoke jQuery UI Draggable drag start?