【发布时间】: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