4

我有一个像这样的可拖动:

$(".tab li").draggable({
    revert: true,
    delay: 1000,
    opacity: .75,
    helper: "clone",
    appendTo: "body"
})
.bind("dragstart", this.doSomething)
.bind("dragstop", this.undoSomething);

因此,在按住鼠标一秒钟后,就可以开始拖动了。只要您在 1 秒后移动鼠标,它就可以正常工作。移动鼠标后,dragstart 事件会立即按应有的方式发送。我想要的是“dragstart”在 1 秒后触发,即使您不拖动鼠标也是如此。

我知道我可以这样做:

.bind("mousedown", this.setSomeIntervalAndWait)

但我需要访问作为 draggable() 的一部分创建的 ui.draggable 元素,因此 mousedown/mouseup 解决方案将不起作用。

如果不修改 jQueryUI 以在延迟而不是鼠标移动时触发事件,这是否可能?我可以使用超时来破解一些东西,克隆对象,定位它并在“dragstart”上删除它,但我希望有一些不那么复杂的东西。

4

2 回答 2

6

在最新的 JQuery UI Draggable 中,现在有一个延迟选项。查看演示

于 2014-06-24T08:55:04.007 回答
0

答案很简单。JQuery UI 的可拖动交互不支持这一点,所以你要么需要修改 JQuery UI,要么做一些你已经暗示过的事情。我会选择两者中的后者,除非你知道这是你要经常重复使用的东西。我想说实现类似的最好方法是使用bind(pre-1.7)或on(post-1.7)在 JQuery 中实现自定义事件处理程序。您甚至可以实现自己的小JQuery 插件,该插件实现draggable但添加您的事件。

如果您想要比这更多的细节,或者想要一个如何编写这样一个插件的示例,请告诉我。

于 2012-07-09T18:02:14.807 回答