1

嗨,我需要循环音频文件一定次数,即 4 次,我的声音文件循环正确,代码如下。? 4x后如何停止循环,非常感谢P

$('#play_audio').click(function () {
            var audio = document.createElement("audio");
            audio.src = "files/windows%20default.mp3";

            audio.addEventListener('ended', function () {
                // Wait 500 milliseconds before next loop

                setTimeout(function () { audio.play(); }, 500);
            }, false);           

            audio.play(); 
    });
4

5 回答 5

4

我设法这样做:

 $('#play_audio').click(function () {                     
            var times = 4;
            var loop = setInterval(repeat, 500);

        function repeat() {
            times--;
            if (times === 0) {
                clearInterval(loop);
            }

            var audio = document.createElement("audio");
            audio.src = "files/windows%20default.mp3";

            audio.play();
        }

        repeat();           
    });      
}); 
于 2013-03-15T07:04:31.920 回答
2

也许更好的方法是保持 HTML 不变。只需使用特定的 id 定位它。

<audio id="loop-limited" controls>
    <source src="music.ogg" type="audio/ogg">
    <source src="music.mp3" type="audio/mpeg">
</audio> 

这是JavaScript:

// Audio Loop Limit
var loopLimit = 4;
var loopCounter = 0;
document.getElementById('loop-limited').addEventListener('ended', function(){
    if (loopCounter < loopLimit){
        this.currentTime = 0;
        this.play();
        loopCounter++;
    }
}, false);   
于 2015-11-25T07:38:13.563 回答
1

if用这样的计数器抛出一个简单的语句:

更新:

$('#play_audio').click(function () {
            var audio = document.createElement("audio");
            audio.src = "files/windows%20default.mp3";

            audio.addEventListener('ended', function () {

                var repeat = 0;

                // Wait 500 milliseconds before next loop  
                setTimeout(function () {
                      if repeat < 3 {
                           var repeat = repeat + 1;
                           audio.play();
                      }
                      else {
                           return done;                
                      }
                }, 500);

            }, false);

      audio.play();
});

第二次更新:

$('#play_audio').click(function () {
        var audio = document.createElement("audio");
        audio.src = "files/windows%20default.mp3";        

        delay(500).audio.play();
        delay(1000).audio.play();
        delay(1500).audio.play();
        delay(2000).audio.play();
});

从编程的角度来看,它是不可扩展的,但是如果您尝试仅解决这个问题一次,这是一种可行的解决方法。

我确定如果我有更多时间,我们可以聊天,也许我可以让循环代码工作,但试试这个,让我知道它是否有效。

于 2013-03-15T01:22:31.880 回答
1

我最近遇到了类似的情况,我用这样的代码解决了它:

var ringsToPlay = 4;
var sound = new Audio('http://www.oneoakway.com/_inactive/oldfiles/chimebang.mp3');
var currentRing = 0;

function doIt() {
    sound.volume = .4;
    sound.play();
    currentRing = 1;
    sound.addEventListener('ended', ringMore, false);
}

function ringMore() {
    if(currentRing == ringsToPlay) {
        sound.removeEventListener('ended', ringMore, false);
    } else {
        sound.play();
        currentRing++;
    }
}

请注意,我只为最新的浏览器编写代码。我不知道这是否适用于较旧的浏览器,可能不会。我只在 FF、Chrome 和 IE、最新版本、Windows 7 中测试我的代码。

小提琴:http : //jsfiddle.net/fidnut/2oL5fsxz/1/

于 2014-12-15T15:39:05.670 回答
0

当他们加载您的页面时吓唬他们......但是,谢谢我正在寻找一种方法来做到这一点,

$(document).ready(function () {
    var times = Math.floor((Math.random() * 5) + 1);
    var loop = setInterval(repeat, 500);

    function repeat() {
        times--;
        if (times === 0) {
            clearInterval(loop);
        }

        var audio = document.createElement("audio");
        audio.src = "http://static1.grsites.com/archive/sounds/birds/birds001.wav";

        audio.play();
    }

    repeat();
});

https://jsfiddle.net/qmcw0cqq/

于 2015-10-05T22:04:38.207 回答