【问题标题】:Initiate drag after delay in jQuery UI Draggable without having to move mouse?在 jQuery UI Draggable 延迟后启动拖动而无需移动鼠标?
【发布时间】:2012-07-09 17:48:05
【问题描述】:

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

$(".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”上将其删除,但我希望不那么复杂。

【问题讨论】:

  • 您希望即使用户没有拖动也能启动 dragstart?这没有多大意义。
  • 在这种情况下,拖动 HAS 是因为它们已经满足了延迟条件,但是您当然会比我更了解我的应用程序,不是吗?如果您没有建设性的答案,请不要浪费您的时间、我的时间以及以后可能有相同问题的人的时间。
  • 我想问的是,你想用这个新的 dragstart 功能实现的目标是什么?也许有一种更简单的方法是您没有想到的。
  • 基本上,我需要一个“dragready”事件。告诉我好的,你已经满足了延迟标准,如果鼠标移动,我们就可以拖动了。我需要做的是创建克隆以指示“我们要走了”,即使它们不动。如果他们什么都没做就释放了,那很好 - 它只会做 dragend ,其余的会自己处理。
  • 非常好的问题,我只是想知道同样的问题。我认为如果您使用delay 有一个事件通知您元素已准备好拖动会很好。例如。你可以改变元素的颜色。见(^^)~>jsfiddle.net/Sr9Rp/3

标签: javascript jquery jquery-ui draggable


【解决方案1】:

在最新的 JQuery UI Draggable 中,现在有一个 delay 选项。查看demo

【讨论】:

    【解决方案2】:

    答案是否定的。JQuery UI 的可拖动交互不支持这一点,因此您要么需要修改 JQuery UI,要么执行您已经暗示的事情。我会选择两者中的后者,除非你知道这是你要经常重复使用的东西非常。我想说实现这样的事情的最佳方法是使用bind(1.7 之前)或on(1.7 之后)在JQuery 中实现自定义事件处理程序。您甚至可以实现自己的小JQuery plug-in,它实现了draggable,但添加了您的事件。

    如果您想了解更多详细信息,或者想要了解如何编写此类插件的示例,请告诉我。

    【讨论】:

    • 是的 - 好的。我就是这么想的。我想这已经很好了。我不认为它会经常被重复使用,所以我会添加一些额外的事件来模拟“dragready”。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-06
    • 2019-10-27
    • 2010-10-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多