javascript - 多次单击按钮,在 JavaScript 中播放多个音频(旧声音重叠新声音)

标签 javascript html

当我点击按钮时,音频开始。但是当我多次点击按钮时,多个音频同时播放。

HTML CODE
<button id = 'bt'> Click Me </button>

JavaScript Code

<script type="text/javascript">
  url = 'song.mp3';

  var btn =document.getElementById('bt');
  btn.addEventListener('click', function(){
    var audioElement = document.createElement('audio');
    audioElement.setAttribute('src', url);
    playFunc(my, 3);
  });

  function PlayFunc(target, RepeatCount) {
    var soundFunc = function(){
        RepeatCount--;
        target.currentTime = 0;
        if (RepeatCount>0)
            target.play();
        else
            target.removeEventListener('ended', soundFunc);
    }
    target.addEventListener('ended', soundFunc)
    target.play();
  }
</script>

我认为的解决方案-

  1. 在创建新的点击事件之前,销毁最后一个事件然后创建新的。
  2. 当用户点击第二个时,它会检查是否 cureentTime == 0,然后播放音频,否则会重新开始,否则什么也不会发生。

最佳答案

感谢 Gurpreet,您的解决方案成功了。

On each click I'm creating a new audio element thats why multiple audio are playing.

只是我将我的音频保存到一个变量并传递给 playFunc。

  url = 'song.mp3'
  const myAudio = new Audio(url);

  var btn =document.getElementById('bt');
  btn.addEventListener('click', function(){
    playFunc(myAudio, 3);
  });

  function PlayFunc(target, RepeatCount) {
    var soundFunc = function(){
        RepeatCount--;
        target.currentTime = 0;
        if (RepeatCount>0)
            target.play();
        else
            target.removeEventListener('ended', soundFunc);
    }
    target.addEventListener('ended', soundFunc)
    target.play();
  }

关于javascript - 多次单击按钮,在 JavaScript 中播放多个音频(旧声音重叠新声音),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51803870/

相关文章:

html - "overflow-x: auto' 无法在 CSS 网格中的表格上工作以使其可滚动以响应响应,我该如何解决?

python - 如何通过 XPath 选择最后一个 p 元素之前的所有元素?

javascript - Vue.js vue-html5-编辑器

javascript - jQuery 函数删除一行后刷新表

javascript - 编辑值时输入失去焦点。使用 ngFor 和 ngModel。 Angular 5

javascript - Foreach 调用函数

javascript - 使用Google WebFontLoader在字体加载后调用脚本

javascript - 饼图外弧边界d3(svg)

javascript - 发送短信后回调到html页面

javascript - 获取不带标签的 ckeditor 内容的前 300 个字符