2012-02-17 90 views
1

我預載我的所有資產之前,我開始一個基於JS的應用程序做:預加載音頻文件/事件?

​​

這工作得很好,當我剛png在我的陣列,但是當我添加音頻(MP3音樂)的DOM元素得到創建,但它永遠不會啓動onload,所以應用程序永遠不會啓動。我已經嘗試添加一個tmp.load(),但它沒有任何區別 - 我也無法在網上找到任何全面的信息。這種方法甚至可能嗎? Audio()是否會啓動適當的事件?謝謝!

+0

是'preload'屬性不適合你? – Lloyd 2012-02-17 19:40:16

回答

2

您正在尋找media events,其中說你可以使用例如loadeddata

我想解決的其他一些觀點:

  • 字符的正則表達式字符組內不需要逃跑。
  • 爲什麼不使用jQuery創建元素並綁定事件處理程序?

我改變你的代碼一點點:

$.each(assets, function() { 
    var r = /\.([^.]+)$/, 
     ext = r.exec(this), //get file type 
     tmp = ext[1] === 'png' 
       ? $("<img>") 
       : $("<audio>"), 
     eventName = ext[1] === 'png' 
        ? 'load' 
        : 'loadeddata'; 

    tmp 
     .on(eventName, function() { 
      var i = assets.indexOf(this); 
      assets.splice(i, 1); 

      if (!assets.length){ 
       console.log('all loaded'); 
       app.build(); 
      } 
     }) 
     .attr("src", this); // only set after adding the load callback 
          // to avoid a possible race condition 
}); 
+0

感謝RegExp上的提示 – m90 2012-02-17 17:09:26