jQuery droppable - 如何在短时间内对悬停做出反应?

时间:2011-10-19 06:28:58

标签: jquery-ui

我使用jQuery draggable / droppable将(div)从一个列表拖动到另一个列表。两个列表都有固定数量的列表项,列表项本身可以为空或已包含div。

我将div拖动到列表项。如果列表项已经包含div,那么我希望将div推下到它下面的列表项 - 以便为我拖动的div让路。我可以使用droppable中的“over”事件来完成此操作。但我希望这只有在用户暂停一段时间后才会发生,比如0.5秒。我怎么能这样做?

此外,如果用户决定不放弃,那么我希望移位的物品回到原来的位置。再一次,最容易实现的是什么?

感谢您的帮助

威廉

1 个答案:

答案 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,要么我已经做了一些事情来导致这个。

关于你的第二个问题。我不确定我完全理解你要追求的是什么。你在找

吗?