我使用jQuery draggable / droppable将(div)从一个列表拖动到另一个列表。两个列表都有固定数量的列表项,列表项本身可以为空或已包含div。
我将div拖动到列表项。如果列表项已经包含div,那么我希望将div推下到它下面的列表项 - 以便为我拖动的div让路。我可以使用droppable中的“over”事件来完成此操作。但我希望这只有在用户暂停一段时间后才会发生,比如0.5秒。我怎么能这样做?
此外,如果用户决定不放弃,那么我希望移位的物品回到原来的位置。再一次,最容易实现的是什么?
感谢您的帮助
威廉
答案 0 :(得分:0)
我恰好在做类似的事情。就我而言,我正在使用treeTable插件。如果它在一段时间内徘徊,我想展开折叠的树。这是我到目前为止所拥有的。我今天恰巧正在努力解决这个问题。请注意使用超时来延迟操作。
var timeout = null;
var clear = function() {
if (timeout) {
clearTimeout(timeout);
timeout = null;
}
}
$(".selector").droppable({
over: function(e, ui) {
if (! $(this).is("expanded")) {
clear();
timeout = setTimeout(function() {
$(this).expand();
timeout = null;
}, 1000);
}
}
, out: clear
, drop: function(e, ui) {
clear();
...
}
});
我仍然遇到这个问题。在一个分支扩展后,它下面的行被推下来为扩展分支腾出空间。我还没下降,所以我将鼠标悬停在扩展分支中的第一个新元素上。问题是这个元素没有得到hoverClass,第一个被推到新分支下面的元素得到它。这就像jquery没有弄清楚它被移动了。考虑到你所描述的内容,我想你可能会遇到这个问题。
我在jquery-1.4.2上,但后来我更新到jquery-1.6.4,看看是否能解决这个问题。两个版本都表现出相同的行为。另外,我在Chrome 14.0.835.202,Opera 11.52,Firefox 3.6.23和IE7.0.5730.13中进行了测试。它在所有这些中都以相同的方式发生。所以,要么jquery有一个bug,要么我已经做了一些事情来导致这个。
关于你的第二个问题。我不确定我完全理解你要追求的是什么。你在找
吗?