作者shadowjohn (转角遇到爱)
看板Ajax
标题Re: [问题] setTimeout与回圈的问题
时间Thu Nov 24 14:40:41 2016
※ 引述《iamshuichi (vincent)》之铭言:
: audioPlay=[audio1.play(), audio2.play(), audio3.play();
: time=[0, 500, 1000];
: for (var i=0; i<3; i++) {
: setTimeout("audioPlay[i]", time[i]);
: }
: 上面这段程式,我希望audio1播完之後
: 等待500毫秒之後播audio2
: 再等待500毫秒後播audio3
: 但是失败了,我猜回圈大概不能这样写吧!
: 於是我修改了一下
: for (var i=0; i<3; i++) {
: setTimeout("audioPlay[i]", 500);
: }
: 结果还是不行,三个声音同时出来
: 看来JavaScript是先等500毫秒
: 再同时执行前面的三个函数
: 如果想达到我的目的
: 不知道该怎麽写呢?
for (var i=0; i<3; i++) {
setTimeout("audioPlay[i]", 500);
}
上面这样写是不行的
请改成下面这样
for (var i=0;i<3; i++) {
(function (index) { //加包的一层
setTimeout(function () {
audioPlay[index];
}, 500);
})(i); //带入回圈的 i 值,会变成这个加包的function,变成 index 放入
}
这样写就不用改太多了 :)
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 140.134.48.253
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/Ajax/M.1479969644.A.5DD.html
1F:推 eight0: 如果用IE10+ 直接把i传给setTimeout作第三个参数就可以了 11/24 14:53
2F:→ shadowjohn: 通常只记各种浏览器都相容的作法 11/24 15:08
3F:→ illl: 他应该是在audio加EventListener吧? 11/24 16:33
4F:→ illl: audio1.onended = function() {foor loop放audio2和3} 11/24 16:42
5F:→ iamshuichi: 感谢几位大大的指导,我研究看看! 11/24 21:44