2013-10-18 22 views
1

我正在使用switch()來播放某些按鍵被按下時發出的聲音,但是我希望讓聲音循環停止並在放開鍵時進行重置。這裏是我的代碼:在switch()函數上使用事件處理函數來重置音頻循環

$(function() { 
    $(document).on("keydown", function(key) { 
     switch(parseInt(key.which, 10)) { 
      case 65: 
       $("#sound").get(0).play(); 
       break; 

      case 83: 
       $("#sound2").get(0).play(); 
       break; 

      case 68: 
       $("#sound3").get(0).play(); 
       break; 

      case 70: 
       $("#sound4").get(0).play(); 
       break; 

     }; 
    }).on("keyup", function() { 
     $(this).pause(); 
     $(this).currentTime=0; 
    }); 
}); 

我想我的問題就出在KEYUP處理程序中使用$(本),但我不希望指定每個聲音ID作爲變量,因爲我最終將有許多人。有沒有辦法簡單地做到這一點?

感謝您的幫助!

回答

1

this內KEYUP處理器引用文檔對象,你可以嘗試參考保持當前正在播放的聲音元素

$(function() { 
    var playing; 
    $(document).on("keydown", function(key) { 
     playing = undefined; 
     switch(parseInt(key.which, 10)) { 
      case 65: 
       playing = $("#sound").get(0); 
       break; 

      case 83: 
       playing = $("#sound2").get(0); 
       break; 

      case 68: 
       playing = $("#sound3").get(0); 
       break; 

      case 70: 
       playing = $("#sound4").get(0); 
       break; 

     }; 
     if(playing){ 
      playing.play(); 
     } 
    }).on("keyup", function() { 
     if(playing){ 
      playing.pause(); 
      playing.currentTime=0; 
      playing = undefined; 
     } 
    }); 
}); 
+0

阿倫您好,感謝您的幫助。這似乎沒有工作。聲音現在不會播放。 – logicForPresident

+0

@Paul你可以在keydown handkler的if條件之前添加一個'console.log(playing)' –

+0

我將if()語句從play.play()行中取出並且它現在完美地工作,這對於考慮播放不是布爾值。非常感謝你的幫助! – logicForPresident

相關問題