看板 Ajax 關於我們 聯絡資訊
※ 引述《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
eight0: 如果用IE10+ 直接把i傳給setTimeout作第三個參數就可以了 11/24 14:53
shadowjohn: 通常只記各種瀏覽器都相容的作法 11/24 15:08
illl: 他應該是在audio加EventListener吧? 11/24 16:33
illl: audio1.onended = function() {foor loop放audio2和3} 11/24 16:42
iamshuichi: 感謝幾位大大的指導,我研究看看! 11/24 21:44