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();
}
});
}
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
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
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. –