2012-05-27 18 views
2

我怎樣才能使一個元件的移動而用戶「的keydown」,然後,如果他做「KEYUP」停止動畫(運動),這是我的代碼現在JQuery的同時的keydown

$(document).ready(function(){ 

    function checkKey(e){ 
     switch (e.keyCode) { 
      case 40: 
       //alert('down'); 
       $('#cube').animate({top: "+=20px"}) 
       break; 
      case 38: 
       //alert('up'); 
       $('#cube').animate({top: "-=20px"}) 
       break; 
      case 37: 
       //alert('left'); 
       $('#cube').animate({left: "-=20px"}) 
       break; 
      case 39: 
       //alert('right'); 
       $('#cube').animate({left: "+=20px"}) 
       break; 
      default: 
       alert('???'); 
       }  
    } 

    if ($.browser.mozilla) { 
     $(document).keydown (checkKey); 
    } else { 
     $(document).keydown (checkKey); 
    } 
}) 

我想在用戶按下按鍵(向下,向左,向上,向右)時移動立方體,而不是每次按下都可以?

回答

3

是你在找?

$(document).on("keyup", function() { 
    $("#cube").stop(true); 
}); 

DEMO:http://jsfiddle.net/LjGRe/

+0

oohh第一次是看 「上」 感謝法! – BlareStriker

+0

@BlareStriker嗯......那麼它能解決你的問題嗎? – VisioN

+0

但我怎麼能讓鑰匙是keydown循環?因爲立方體隨着每次按鍵移動,但我不想那樣,我想立方體移動,而按鍵是按 – BlareStriker

0

你可以改變的checkKey功能,這給它添加:

function checkKey(e){ 
      $(document).keyup(return); 
     switch (e.keyCode) { 
      case 40: 
       //alert('down'); 
       $('#cube').animate({top: "+=20px"}) 
       break; 
      case 38: 
       //alert('up'); 
       $('#cube').animate({top: "-=20px"}) 
       break; 
      case 37: 
       //alert('left'); 
       $('#cube').animate({left: "-=20px"}) 
       break; 
      case 39: 
       //alert('right'); 
       $('#cube').animate({left: "+=20px"}) 
       break; 
      default: 
       alert('???'); 
       }  
    } 
+0

多數民衆贊成在沒關係,是的,當我讓「keyup」它停止,但我怎麼能使循環運動,而關鍵是down「keydown」 – BlareStriker

0

我認爲使用一個計時器來處理動畫效果較好。

當一個鍵被按下您只需啓動計時器和停止它的按鍵被釋放時..

這裏是處理多個按鍵的簡單解決方案(可以斜走

var direction = {top:0,left:0}, 
    animator = null, 
    cube = $("#cube"); 

function animate(){ 
    cube.css({ 
     top: '+=' + direction.top, 
     left: '+=' + direction.left 
    }); 
} 
function setProperties(keyCode, unset){ 
     switch (keyCode) { 
     case 40: 
       direction.top = (unset)?0:2; 
      break; 
     case 38: 
      direction.top = (unset)?0:-2; 
      break; 
     case 37: 
      direction.left = (unset)?0:-2; 
      break; 
     case 39: 
      direction.left = (unset)?0:2; 
      break; 
    } 
} 
function setKey(e) { 

    setProperties(e.keyCode); 

    if (animator === null){ 
     animator = setInterval(animate, 10); 
    } 
} 
function unsetKey(e){ 
    setProperties(e.keyCode, true); 
    if (direction.top === 0 && direction.left === 0){ 
     clearTimeout(animator); 
     animator = null; 
    } 
} 

$(document) 
    .on("keyup", unsetKey) 
    .on('keydown', setKey); 

Demo athttp://jsfiddle.net/gaby/Cu6nW/

+0

這個檢查點是什麼?:'if(direction.top === 0 && direction.left === 0){...}' –

+0

在提供的代碼的上下文中,如果在任一方向都沒有移動(*水平或垂直*),則此檢查會停止計時器 –