2012-02-17 88 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