2010-06-13 3 views
2

J'ai fait un curseur qui utilise les touches fléchées gauche et droite pour déplacer la diapositive, mais lorsque pressé pour rapidement il va bug un peu et je me demandais s'il est possible de limiter le nombre de presses, disons une seconde. Vous pouvez le voir ici: [lien supprimé]Comment limiter la fréquence à laquelle les touches peuvent être pressées sur un curseur jQuery?

$('#slider-nav div').click(function() { 
    $('#slider-nav div').removeClass('selected').addClass(''); 
    $('#slider-nav div:eq('+($.jcarousel.intval($(this).text())-1)+')').addClass('selected'); 
}) 

// Allow left and right keys to control slider 
$(document.documentElement).keypress(function(e) { 
    var code = (e.keyCode ? e.keyCode : e.which); 
    var direction = null; 

    // handle cursor keys 
    if (code == 37) { // left key 
     direction = 'prev'; 
    } 
    else if (code == 39) { // right key 
     direction = 'next'; 
    } 

    if (direction != null) { 
     $('#slider-nav div.selected')[direction]().click(); 
    } 
}); 
+0

Bienvenue à SO! Que voulez-vous dire par "ça va bug un peu"? Quel est le problème? –

+0

Fondamentalement, l'animation de la diapositive ne peut tout simplement pas suivre les pressions sur les touches. – Jaybuz

+0

Vous devez utiliser l'événement 'keydown' plutôt que 'keypress' pour plusieurs raisons: premièrement, vous obtenez un support de navigateur uniforme et non ambigu avec la propriété' keyCode' de l'événement (dans votre solution actuelle, en tapant un symbole de pourcentage) tirera la clé de flèche gauche). Deux, keypresses auto-répétitives déclencheront des événements 'keydown' répétés mais pas des événements de« keypress »dans IE. –

Répondre

1

Vous pouvez ajouter une variable globale et puis quand la touche est pressée réglez-le sur getTime() puis sur le prochain appel, vérifier si la différence dans le temps de jeu et l'heure actuelle est inférieure à 1000.

var checkTime = 0; 
function onKeyPress(){ 
    var currentTime = new Date() 
    if((currentTime.getTime() - checkTime) > 1000){ 
     //do stuff; 

     checkTime =currentTime.getTime(); 
    } 
} 
+1

Cela a fonctionné, merci beaucoup! Je vais quand même accepter de meilleures solutions, s'il y en a. :) – Jaybuz

Questions connexes