2012-03-29 11 views
1

Dies ist der Code, den ich jetzt verwenden, um ein mehrschichtiges Karussell (links rechts nach oben) zu verschieben, aber ich muss eine Timeout-Funktion für sagen 5000 so hinzufügen Die Animation muss abgeschlossen sein, bevor der nächste Klick ausgelöst wird.Wie füge ich eine Verzögerung/Zeitüberschreitung zu jQuery Tastendruck Funktion

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:

landete ich eine Lösung zu finden. Ich weiß, dass es wahrscheinlich einen viel saubereren Weg gibt, dies zu tun, aber ich weiß nicht, wie so verzeihen Sie meine Unordnung.

// 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

Dies wird Benutzer verärgern ... sie drücken eine Taste und erhalten nicht das erwartete Ergebnis - warum nicht [stop()] (http://api.jquery.com/stop/) zum Abschluss verwenden die Animation und starte die nächste? – ManseUK

+0

Ich würde eher auf eine Verspätung als auf ein "Lock" gehen, da es einfacher zu implementieren wäre und weil es mich ernsthaft nerven würde, wenn ich 3 Bilder vorspringen würde und für jeden Zug vor dem nächsten Tastendruck warten müsste. – Anthony

+0

Ich denke, das Problem ist, dass ich um eine .active (ul.active) und .active-li (ul.active li.active-li) bewegt, um die aktuelle Folie Position zu verfolgen. Und es ist eine Kombination, bei der sich diese schließen und irgendwann, wenn der Benutzer die Pfeile zu schnell antippt, kommt er vor sich her. –

Antwort

0

Dies sollte den Trick:

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

Sollte das ersetzen - $ ("# right"). Trigger ("click"); –

+1

Mehr Kontext. Wohin führt das? An welches Ereignis ist es gebunden? –

1

versuchen Verzögerungsfunktion aus der Jquery-Bibliothek wird hier der Tutorial-URL http://api.jquery.com/delay/

es wahrscheinlich so etwas wie das sein würde.

+0

Sollte das ersetzen - $ ("# down"). Trigger ("click"); –

+0

Ja, Sie sollten Verzögerung vor triger hinzufügen –