为什么一个新的音频文件开始播放,如果一个已经在播放?(JS)

Why does a new audio file start playing if one is already playing? (JS)

本文关键字:播放 一个 如果 JS 文件 音频 为什么 开始      更新时间:2023-09-26

我不知道为什么,但我不明白为什么这不起作用。我已经坐了几个小时,尝试了不同的方法,阅读和观看了关于这个主题的视频,但我仍然不明白。

Q:为什么每次我点击元素时,一个"新"音频文件开始播放,与前一个重叠?难道我的if报表不能解决这个问题吗?

document.getElementById("chatWrapper").addEventListener("click", playSound);
function playSound() {
    //alert("Success!");
    var sEE0 = new Audio('../sound/00-menu-music.mp3');
        sEE0.volume = 0.2;
    if (sEE0.duration > 0) {
        return;
    } else {
        sEE0.play();
    }
}

如何解决这个问题?提前感谢!

你似乎每次点击都在创建一个新的音频元素。

尝试只初始化一次:(attn, quick'n'dirty!)

document.getElementById("chatWrapper").addEventListener("click", playSound);
var sEE0 = new Audio('../sound/00-menu-music.mp3');
function playSound() {
    //alert("Success!");
    sEE0.volume = 0.2;
    if (sEE0.duration > 0) {
        return;
    } else {
        sEE0.play();
    }
}

就像@frontend_dev说的,你的问题之一是变量范围,其他是你正在检查使用sEE0.duration,但这会给你音频文件的长度,这必然比0大,可能这就是为什么它不玩,你要找的是currentTime,如果条件应该是if (sEE0.duration > 0) {

但我更喜欢检查音频是否正在播放或暂停,而不是检查音频播放的哪个部分(除非用例需要)

我将把代码重写为:

document.getElementById("chatWrapper").addEventListener("click", playSound);
var sEE0 = new Audio('../sound/00-menu-music.mp3');
sEE0.volume = 0.2;
function playSound() {
    //alert("Success!");
    if (sEE0.paused) {
        sEE0.play();
    }
}