[英]Javascript setInterval loop play audio clip out of rythm and drop sometime on mobile phone
[英]Play audio with setInterval and Loop
我有这个数组:
var song = ['note1.mp3', 'note2.mp3', 'note3.mp3', 'note4.mp3']
for(i = 0; i < song.length; i++) {
setInterval(function() {
//play song[i]
//or console.log(song[i]);
}, 1000);
}
但这不起作用,有人知道为什么吗? 我要播放note1.mp3,然后播放note2,note3和note4。
谢谢!
您遇到范围问题。 所有回调都有一个i
,您必须为每个i
创建一个作用域。 您还必须更改回调。
http://jsfiddle.net/1xy4j3eq/7/
var song = ['a', 'b', 'c', 'd', 'e'];
$.each(song, function (i) {
setTimeout(function () {
$("div").text(song[i]);
}, i * 1000);
});
根据您的评论,您得到的行为是您总是得到最后一首歌。 这是因为间隔函数在循环计数器i
上关闭,因此它使用了调用间隔函数时 i
拥有的值,该值将始终是最后一个值。
通常,永远不要在这样的循环内设置回调。 相反,您可以做这样的事情
var song = ['note1.mp3', 'note2.mp3', 'note3.mp3', 'note4.mp3']
var makeCallback = function(index) {
return function() {
console.log(index);
}
}
for(i = 0; i < song.length; i++) {
setInterval(makeCallback(i), 1000);
}
从而为每次迭代生成不同的闭包
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.