jQuery的悬停延迟
我试图在下拉菜单的悬停效果中实现时间延迟。我试图使用setTimeout和下拉菜单在悬停时正确工作,但是我没有得到延迟。它只是瞬间发生的。下面是我的代码:jQuery的悬停延迟,jquery,jquery-hover,Jquery,Jquery Hover,我试图在下拉菜单的悬停效果中实现时间延迟。我试图使用setTimeout和下拉菜单在悬停时正确工作,但是我没有得到延迟。它只是瞬间发生的。下面是我的代码: $(document).ready(function(){ $("li.dropdown-hover").hover(hoverIn, hoverOut); }); function hoverIn(){ setTimeout(func1(this), 3000); } function hoverOut(){ s
$(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非常陌生,出于某种原因,我不希望使用任何外部插件,比如许多类似问题中建议的插件。有人能告诉我这里出了什么问题吗?我相信您必须按如下方式向函数传递参数:
setTimeout(func1, 3000,this);
相对于
setTimeout(func1(this), 3000);
我相信您必须按如下方式向函数传递参数:
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);
或者,您可以将
此作为一个额外参数传递,如Richard B所示。当您写入设置超时时(func1(this),3000)
,您将立即调用func1
函数。与此相同:
func1(this);
setTimeout(undefined, 3000);
相反,您希望传递setTimeout
一个新函数,该函数将在分配的时间后运行
var self = this;
setTimeout(function() {
func1(self);
}, 3000);
或者您可以像Richard B所示,将此作为一个额外参数传递。您可以使用jQuery的默认函数。如下所示:
$('.a').hover(function () {
$('.b').delay(2000).fadeIn(200);
});
jsiddle:您可以像这样使用jQuery的默认函数。delay
:
$('.a').hover(function () {
$('.b').delay(2000).fadeIn(200);
});
jsFiddle:谢谢你的回答。不知何故,setTimeout无法访问“this”(它被视为窗口对象而不是“li”),因此我通过将其存储在变量中来解决这个问题。现在开始工作了:-)谢谢你的回答。不知何故,setTimeout无法访问“this”(它被视为窗口对象而不是“li”),因此我通过将其存储在变量中来解决这个问题。正在工作:-)