var toogleDelay = 500;
var closeTimeout = null;
$(">ul>li", $nav).hover(function () {
var $this = $(this);
if(closeTimeout) {
clearTimeout(closeTimeout);
}
var openMenuCallback = function() {
$this.addClass("hover");
};
window.setTimeout(openMenuCallback, toogleDelay);
}, function () {
var $this = $(this);
var closeMenuCallback = function() {
$this.removeClass("hover");
};
closeTimeout = window.setTimeout(closeMenuCallback, toogleDelay);
});
我使用此代码段来打开和关闭多点下拉菜单,我希望菜单以0.5秒的延迟淡入淡出。我还在jquery悬停函数的mouseover部分添加了一个cleartimeout,因此如果有人(意外地)离开menuarea并在0.5s内再次输入菜单,菜单就不会关闭。这一切都运行正常,但我现在遇到了问题,因为只有一个下拉列表,即closeTimeout让第一个下拉列表被清除,如果我将鼠标从第一个下拉列表直接移动到第二个下拉列表,我现在有了两个下拉元素都打开了。我该如何重写代码,以便每个下拉列表都有自己的closeTimeout,同时我仍然能够清除悬停函数鼠标悬停部分的超时。
THX 子
答案 0 :(得分:2)
您可以将计时器的ID存储在元素的data
中。像
var $this = $(this);
var closeMenuCallback = function() {
$this.removeClass("hover");
$this.removeData("timerid");
};
var closeTimeout = window.setTimeout(closeMenuCallback, toogleDelay);
$this.data("timerid", closeTimeout);
然后用
检查var $this = $(this);
var closeTimeout = $this.data("timerid");
if(closeTimeout) {
clearTimeout(closeTimeout);
$this.removeData("timerid");
}
答案 1 :(得分:0)