Re: [問題] setTimeout與迴圈的問題

看板Ajax作者 (轉角遇到愛)時間8年前 (2016/11/24 14:40), 編輯推噓1(104)
留言5則, 4人參與, 最新討論串2/5 (看更多)
※ 引述《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://www.ptt.cc/bbs/Ajax/M.1479969644.A.5DD.html

11/24 14:53, , 1F
如果用IE10+ 直接把i傳給setTimeout作第三個參數就可以了
11/24 14:53, 1F

11/24 15:08, , 2F
通常只記各種瀏覽器都相容的作法
11/24 15:08, 2F

11/24 16:33, , 3F
他應該是在audio加EventListener吧?
11/24 16:33, 3F

11/24 16:42, , 4F
audio1.onended = function() {foor loop放audio2和3}
11/24 16:42, 4F

11/24 21:44, , 5F
感謝幾位大大的指導,我研究看看!
11/24 21:44, 5F
文章代碼(AID): #1ODejiNT (Ajax)
文章代碼(AID): #1ODejiNT (Ajax)