Javascript 如何设置打开下拉悬停菜单的1秒延迟?

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

我已经在线阅读了一段时间,还没有找到使用setTimeout函数的正确方法。。有什么原因吗

$('.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()更简单、更短:)