作者iamshuichi (vincent)
看板Ajax
标题[问题] setTimeout与回圈的问题
时间Thu Nov 24 00:15:18 2016
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毫秒
再同时执行前面的三个函数
如果想达到我的目的
不知道该怎麽写呢?
--
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 104.237.91.82
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/Ajax/M.1479917722.A.D7D.html
1F:→ ninetyeight: audioPlay=[audio1, audio2, audio3] 11/24 00:29
2F:→ ninetyeight: setTimeout(function(){audioPlay[i].play()},time[i 11/24 00:29
3F:推 youtuuube000: 改成setTimeout(audioPlay[i], time[i]); 应该可行 11/24 04:02
4F:→ youtuuube000: 因为""里面是字串 因此i是字元 不会随着for的i改变 11/24 04:03
5F:推 TETZ: 我记得setTimeout+for loop的话要用IIFE不然i都会是一样的 11/24 04:13
7F:→ TETZ: 应该说你第一个解法要搭配IIFE第二个的话可以在setTimeout 11/24 04:15
8F:→ TETZ: 里另外加两个setTimeout来跑? 11/24 04:17
10F:→ TETZ: 这个比较清楚 11/24 04:19
11F:→ TETZ: 因为当你执行setTimeout时那些i已经变成2了js的变数是跟着 11/24 04:30
12F:→ TETZ: 记忆体的address除非你另外assign一个变数去存 11/24 04:30
13F:→ xdraculax: 最早的错误是组成阵列时已播放,另外i 的问题可改 setT 11/24 09:47
14F:→ xdraculax: imeout(audoPlay[i].play, time[i]) 11/24 09:47
15F:→ iamshuichi: 感谢几位大大的指导,我研究看看! 11/24 21:44