Javascript 如何设置打开下拉悬停菜单的1秒延迟?
我已经在线阅读了一段时间,还没有找到使用setTimeout函数的正确方法。。有什么原因吗Javascript 如何设置打开下拉悬停菜单的1秒延迟?,javascript,jquery,html,Javascript,Jquery,Html,我已经在线阅读了一段时间,还没有找到使用setTimeout函数的正确方法。。有什么原因吗 $('.drop-down')。单击(函数(){ $(this.hide(); }); $('.nav main li ul').hide().removeClass('.drop-down'); setTimeout(函数(){ $('.nav main li')。悬停( 函数openDrop(){ $('ul',this.stop().slideDown(1000); }, 函数closeDro
$('.drop-down')。单击(函数(){
$(this.hide();
});
$('.nav main li ul').hide().removeClass('.drop-down');
setTimeout(函数(){
$('.nav main li')。悬停(
函数openDrop(){
$('ul',this.stop().slideDown(1000);
},
函数closeDrop(){
$('ul',this.stop().slideUp(1000);
}
);}, 1000);代码>
-
在这种情况下,您可以使用JQuery的delay()方法,无需设置超时
$('ul', this).stop().delay(1000).slideDown(1000);
请参阅更新的fiddle:正如@Tim所说,在这个实例中不需要使用setTimeout
但只是为了回答为什么它不起作用
如果您要使用它(在本例中您确实不需要),它不起作用的原因是因为setTimeout的位置:
setTimeout(function() {
$('.nav-main li').hover(
function openDrop() {
$('ul', this).stop().slideDown(1000);
},
function closeDrop() {
$('ul', this).stop().slideUp(1000);
}
);
}, 1000);
$('.nav-main li').hover(
function openDrop() {
setTimeout(function() {
$('ul', this).stop().slideDown(1000);
}, 1000);
},
function closeDrop() {
setTimeout(function() {
$('ul', this).stop().slideUp(1000);
}, 1000);
}
);
在这里,除了延迟悬停
处理程序添加到页面之外,您实际上没有做任何事情
您需要包装实际要使用setTimeout运行的代码:
setTimeout(function() {
$('.nav-main li').hover(
function openDrop() {
$('ul', this).stop().slideDown(1000);
},
function closeDrop() {
$('ul', this).stop().slideUp(1000);
}
);
}, 1000);
$('.nav-main li').hover(
function openDrop() {
setTimeout(function() {
$('ul', this).stop().slideDown(1000);
}, 1000);
},
function closeDrop() {
setTimeout(function() {
$('ul', this).stop().slideUp(1000);
}, 1000);
}
);
注意,现在有两个设置超时,每个函数一个。啊,好的,这个函数更有意义!有没有办法让延迟运行,然后开始slidedown()?事实上,明白了!非常感谢。好的,所以我的定位是错的。为什么在这种情况下使用delay()更好?我回答得太快了,甚至没有注意到原始示例中的setTimeout。很好的捕获和很好的解释,谢谢。@J.Andrews好吧,setTimeout不必要地“复杂化”了事情,而delay()函数实际上是为这样的情况而设计的,在这种情况下,可以更容易地应用效果。使用setTimeout(AFAIK)没有什么错,但是delay()更简单、更短:)