2012-02-01 18 views
12

Kullanıcı bir tuşunu basılı tutarken, keydown() olayının yalnızca bir kez çağrılmasını, ancak kullanıcının tuşa basmayı durdurmasına kadar çağrılmasını istiyorum. İştejQuery'de yinelenen tuş kilidi nasıl devre dışı bırakılır

ben yapmaya çalışıyorum budur: Kullanıcı sağ ok tuşuna bastığında

$(document).keydown(function(event){ 
    var keycode = (event.keyCode ? event.keyCode : event.which); 
    if(keycode == '39'){ 
       $("#box").animate({"left": "+=30px"}, "fast"); 
    } 
    }); 

yani, ben div # kutu sağa 30px taşımak istiyorum. Hareket eder, ancak kullanıcı tuşa basılı tutarsa ​​uçar.

Kullanıcı, tuşa basmayı sürdürse bile, her basışta yalnızca 30px hızında hareket etmeli ve durdurmalıyım. Nasıl başarılabileceğini biliyor musun?

+2

Kolaylık notunda, 'event.keyCode? event.keyCode: event.which, 'event.keyCode || ile eşdeğerdir event.which', Bool olmayanlar için bile. – Keen

cevap

17

önermek ve keyup bile temizler kadar anahtar kodu 39 görmezden olur bırakın:

var down = {}; 

$(document).keydown(function(event){ 
    var keycode = (event.keyCode ? event.keyCode : event.which); 
    if(keycode == '39'){ 
      if (down['39'] == null) { // first press 
       $("#box").animate({"left": "+=30px"}, "fast"); 
       down['39'] = true; // record that the key's down 
      } 
    } 
    }); 

$(document).keyup(function(event) { 
    var keycode = (event.keyCode ? event.keyCode : event.which); 
    down[keycode] = null; 
}); 
+0

Yaklaşımınız için teşekkür ederiz! İşe yaradı. Bunu doğru cevap olarak işaretliyorum. – Nazar

+1

Bir sözdizimi hatasının olduğuna inanıyorum? $ (document) .keyup (işlev (olay) { var keycode = (event.keyCode? Event.keyCode: event.which); aşağı [keycode] = null; }); – Nazar

2

bir bayrak tutmak ve onu keydown üzerine yeşil i tuşları aşağı olan takip edin keyup olsa

$(document).keydown(function(event){ 
    $flag=false; 
    var keycode = (event.keyCode ? event.keyCode : event.which); 

     if(keycode == '39'){ 
      if(!$flag){ 
       $flag=true; 
       $("#box").animate({"left": "+=30px"}, "fast"); 
     } 
    } 
    });