2012-03-29 74 views
1

这是我现在用来移动一个多层轮播(左上向下)的代码,但我需要添加一个超时函数说5000,所以在触发下一次点击之前,动画有时间完成。如何添加一个延迟/超时到jQuery按键功能

function checkKey(e){ 

     switch (e.keyCode) { 
      case 40: 
       //alert("down"); 
       $("#down").trigger("click"); 
       break; 
      case 38: 
       //alert("up"); 
       $("#up").trigger("click"); 
       break; 
      case 37: 
       //alert("left"); 
       $("#left").trigger("click"); 
       break; 
      case 39: 
       //alert("right"); 
       $("#right").trigger("click"); 
       break; 
       }  
     } 

    // Call checkKey on key press 
    if ($.browser.mozilla) { 
     $(document).keypress(checkKey); 
    } else { 
     $(document).keydown(checkKey); 
    } 

UPDATE:

我最终找到一个解决方案。我知道这样做可能有更简洁的方法,但我不知道如何原谅我的混乱。

// Set Time variable 
    var checkTime = 0; 

    // Call checkKey on key press 
    if ($.browser.mozilla) { 
     $(document.documentElement).keypress(function (event) { 

      // set variable to current time 
      var currentTime = new Date() 
      // See if Now's current time is 400 past the old current time 
      if((currentTime.getTime() - checkTime) > 400){ 

       // If so then fire the triggers. 
       // Using if seemed to limit the inputs to a single keystroke   
       if (event.keyCode == 40) { 
         $("#down").trigger("click"); 
       } else if (event.keyCode == 38) { 
         $("#up").trigger("click"); 
       } else if (event.keyCode == 37) { 
         $("#left").trigger("click"); 
       } else if (event.keyCode == 39) { 
         $("#right").trigger("click"); 
       } 
       // Reset current time. 
       checkTime =currentTime.getTime(); 
      } 


     }); 
    } else { 
     $(document.documentElement).keydown(function (event) { 

      // set variable to current time 
      var currentTime = new Date() 
      // See if Now's current time is 400 past the old current time 
      if((currentTime.getTime() - checkTime) > 400){ 

       // If so then fire the triggers. 
       // Using if seemed to limit the inputs to a single keystroke   
       if (event.keyCode == 40) { 
         $("#down").trigger("click"); 
       } else if (event.keyCode == 38) { 
         $("#up").trigger("click"); 
       } else if (event.keyCode == 37) { 
         $("#left").trigger("click"); 
       } else if (event.keyCode == 39) { 
         $("#right").trigger("click"); 
       } 
       // Reset current time. 
       checkTime =currentTime.getTime(); 
      } 


     }); 
    } 
+0

这会激怒用户...他们按一个键,不会得到预期的结果 - 为什么不使用[Stop()](http://api.jquery.com/stop/)完成动画并开始下一个? – ManseUK 2012-03-29 15:47:53

+0

我会比延迟更多的延迟,因为它会更容易实现,因为如果我试图向前跳3张图片并且在下一次按键之前必须等待每一转,它会严重地使我烦恼。 – Anthony 2012-03-29 15:48:06

+0

我想问题是我正在移动.active(ul.active)和.active-li(ul.active li.active-li)来跟踪当前幻灯片的位置。而且这是一个组合,在这些关闭周围以及在某些时刻,如果用户点击箭头的速度过快,它会超越自己。 – 2012-03-29 15:57:16

回答

0

这应该做的伎俩:

setTimeout(function() { 
    $("#right").trigger("click"); 
}, 5000); 
+0

应该替换这个 - $(“#right”)。trigger(“click”); – 2012-03-29 16:02:11

+1

更多上下文。这个去哪了?什么事情是必然的? – 2012-11-13 03:12:15

1

尝试使用延时功能,从这里jQuery库是教程网址http://api.jquery.com/delay/

它可能会是这样的。

$("#down").delay(5000).trigger("click"); 
+0

应该替换这个 - $(“#down”)。trigger(“click”); – 2012-03-29 16:07:22

+0

是的,你应该在triger之前添加延迟 – 2012-03-29 16:08:13