使用 switch() 函数上的事件处理程序重置音频循环

Using event handler on switch() function to reset audio loop

本文关键字:程序 音频 循环 事件处理 switch 函数 使用      更新时间:2023-09-26

我正在使用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 处理程序中使用 $(this),但我不想将每个声音 id 指定为变量,因为我最终会有很多声音 id。有没有办法简单地做到这一点?

感谢您的帮助!

keyup 处理程序中的this引用文档对象,您可以尝试保留对当前播放的声音元素的引用

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