设置间隔播放音频只循环音频一次?

问题描述 投票:1回答:1

我有一个设定的间隔,在设定的间隔内,我有一个声音需要只播放一次,但问题是声音不断循环而且不停止是否有人知道我在做什么错在这里是我试过的:html:

<audio id="swoosh">
  <source src="/resources/music/swoosh.mp3" type="audio/mpeg">
</audio>

JS:

    var swoosh = document.getElementById("swoosh");

    setInterval(function () {
        if ($('.c:contains("01")').length > 0) {
            $(".links #abt").attr("href", "about.html");

            swoosh.addEventListener('ended', function () {
                swoosh.pause();
                swoosh.currentTime = 0;
                swoosh.loop = false;
            }, false);
            swoosh.play();

            //
            if ($('.c:contains("02")').length > 0) {
                $(".links #work").attr("href", "work.html");

                swoosh.addEventListener('ended', function () {
                    swoosh.pause();
                    swoosh.currentTime = 0;
                    swoosh.loop = false;
                }, false);
                swoosh.play();
            }
        }
    }, 10);

目的是当class="c"的内容发生变化时播放声音,如果内容为01则音频应该播放一次,然后暂停或停止然后当它变为02时它应该再次播放然后停止或暂停等等提前感谢。

javascript setinterval html5-audio addeventlistener
1个回答
0
投票

我想你正试图这样做。存储在一个变量中,“最后的声音”被复制,只有在它发生变化时才会播放新的声音。收听“结束”事件的听众是不必要的,因为每次更改只播放一次。

var swoosh = document.getElementById("swoosh");
var lastPlay = "00";

setInterval(function () {
    var cValue = $('.c').text();
    if (lastPlay != "01" && cValue.indexOf("01") >= 0) {
        $(".links #abt").attr("href", "about.html");
        swoosh.play();
        lastPlay = "01";
    }
    else if (lastPlay != "02" && cValue.indexOf("02") >= 0) {
        $(".links #work").attr("href", "work.html");
        swoosh.play();
        lastPlay = "02";
    }
}, 10);

其他更好的方法是为“.c”元素的change事件添加一个监听器,它每隔10ms避免“查询”。但我没有足够的代码向您展示。

© www.soinside.com 2019 - 2024. All rights reserved.