Jquery UI手动调用开始拖动函数

12
在Jquery UI中,我可以通过调用以下代码将元素配置为可拖动:
$("#drag").draggable();

但是否有一种方法可以从另一个函数手动启动和停止拖动功能?即

someOtherFunction = function() {
  $("#drag").startdrag();
}
yetAnotherFunction = function() {
  $("#drag").stopdrag();
}

也许你对 scrollTo 感兴趣,因为我不相信 draggable 可以在没有鼠标交互的情况下移动对象? - TStamper
我从未说过我不想使用鼠标。我必须在div外部调用拖动,因为它应该由Flash文件内部使用FScommand来启动。 - Jan
4个回答

13

以上的答案似乎过于复杂。

$('.nonDraggableObjectWhichTriggersDrag').mousedown(function(e) {
    $('.draggableObject').trigger(e); 
});

我不太确定这个解决方案是否适用于我的原始项目(因为它涉及Flash和fsCommand),但它是已发布的最接近可行解决方案。在我的项目中,我最终将拖动处理程序放在Flash文件上方,并在Flash按钮上放置div,通过fsCommand调用Flash命令。虽然不太美观,但它确实起作用。 - Jan
1
+1 -- 我知道这个评论有点晚了,但是应该使用triggerHandler(e)。当我使用trigger时,由于我连接的其他函数/DOM的方式,我最终遇到了堆栈溢出的问题。将其更改为triggerHandler解决了此问题,因为没有冒泡发生。triggerHandler也更有效率。 - Olson.dev

1
停止拖拽,你只需要在拖拽回调函数中返回false,就像这样:
$("#unlock-handle").draggable({axis:'x', containment:'parent', drag:onDrag});

...

var onDrag = function(e) {      
    if ($(this).position().left > 200) return false;
};

希望能有所帮助 :-)

1

通过脚本查看鼠标事件启动拖动开始。先是鼠标按下,然后是鼠标移动。如果您可以通过Javascript模拟这些鼠标移动(我不知道在哪里、如何或者是否可能),那么它应该会触发拖动的开始。

注意:刚刚发现YUI有一种方法可以模拟鼠标移动和鼠标点击。请查看http://developer.yahoo.com/yui/yuitest/#useractions


听起来太复杂了。也许使用其他库会更容易实现呢?比如 prototype.js 或类似的库? - Jan
加油。如果原型可以模拟鼠标移动事件,那么它将与yui一样“困难”。 - DMCS

1

我没有找到手动触发拖拽的方法,但是我已经为我的类似情况找到了一种解决方法。

我曾遇到过两个重叠的图片(如下图所示),它们都是部分透明的。在可拖动对象的start(event)期间,我想检查是否碰触到了透明像素。如果是这样,我会在下面寻找另一个元素,以查看是否被触碰到。如果是,我就想开始它的拖动。

enter image description here

解决方案?我在mousemove事件中重新排列图像,然后可拖动的是最上面的那个图像。
对于像素精确的元素选择,请参见我的另一个答案:在另一个元素下注册点击

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