悬停延迟 jQuery
Hover delay with jQuery
我试图在下拉菜单的悬停效果期间实现时间延迟。我正在尝试使用 setTimeout 并且下拉菜单在悬停时可以正常工作,但我没有得到延迟。它只是瞬间发生的。下面是我的代码:
$(document).ready(function(){
$("li.dropdown-hover").hover(hoverIn, hoverOut);
});
function hoverIn(){
setTimeout(func1(this), 3000);
}
function hoverOut(){
setTimeout(func2(this), 1000);
}
function func1(element) {
$(element).find(".dropdown-menu-hover").css("display", "block");
}
function func2(element) {
$(element).find(".dropdown-menu-hover").css("display", "none");
}
我是 jQuery 的新手,出于某种原因,我不想使用许多类似问题中建议的任何外部插件,例如 http://cherne.net/brian/resources/jquery.hoverIntent.html。有人能告诉我这里出了什么问题吗?
我相信你必须按如下方式将参数传递给函数:
setTimeout(func1, 3000,this);
相对于
setTimeout(func1(this), 3000);
当您编写 setTimeout(func1(this), 3000);
时,您将立即调用 func1
函数。与此相同:
func1(this);
setTimeout(undefined, 3000);
相反,您想传递 setTimeout
一个新函数,该函数将在分配的时间后 运行。
var self = this;
setTimeout(function() {
func1(self);
}, 3000);
或者您可以将 this
作为额外参数传递,如 Richard B 所示。
您可以像这样使用 jQuery 的默认函数 .delay
:
$('.a').hover(function () {
$('.b').delay(2000).fadeIn(200);
});
我试图在下拉菜单的悬停效果期间实现时间延迟。我正在尝试使用 setTimeout 并且下拉菜单在悬停时可以正常工作,但我没有得到延迟。它只是瞬间发生的。下面是我的代码:
$(document).ready(function(){
$("li.dropdown-hover").hover(hoverIn, hoverOut);
});
function hoverIn(){
setTimeout(func1(this), 3000);
}
function hoverOut(){
setTimeout(func2(this), 1000);
}
function func1(element) {
$(element).find(".dropdown-menu-hover").css("display", "block");
}
function func2(element) {
$(element).find(".dropdown-menu-hover").css("display", "none");
}
我是 jQuery 的新手,出于某种原因,我不想使用许多类似问题中建议的任何外部插件,例如 http://cherne.net/brian/resources/jquery.hoverIntent.html。有人能告诉我这里出了什么问题吗?
我相信你必须按如下方式将参数传递给函数:
setTimeout(func1, 3000,this);
相对于
setTimeout(func1(this), 3000);
当您编写 setTimeout(func1(this), 3000);
时,您将立即调用 func1
函数。与此相同:
func1(this);
setTimeout(undefined, 3000);
相反,您想传递 setTimeout
一个新函数,该函数将在分配的时间后 运行。
var self = this;
setTimeout(function() {
func1(self);
}, 3000);
或者您可以将 this
作为额外参数传递,如 Richard B 所示。
您可以像这样使用 jQuery 的默认函数 .delay
:
$('.a').hover(function () {
$('.b').delay(2000).fadeIn(200);
});