预加载音频文件/事件?

在我启动基于JS的应用程序之前,我正在预加载所有资产:

assets = [....]; // files $.each(assets,function(){ var r = /\.([^\.]+)$/; var ext = r.exec(this); //get file type if (ext[1] == 'png'){ var tmp = new Image(); } else if (ext[1] == 'mp3'){ var tmp = new Audio(); } tmp.src = this; tmp.onload = function(){ var i = assets.indexOf(this); assets.splice(i,1); if (!assets.length){ console.log('all loaded'); app.build(); } } }); 

当我在我的数组中只有png时,这很好用,但是当我添加音频(mp3)时,DOM元素被创建,但它永远不会触发onload所以app永远不会启动。 我尝试添加一个tmp.load()但它没有任何区别 – 我也无法在网上找到任何全面的信息。 这种方法甚至可能吗? Audio()是否会触发相应的事件? 谢谢!

您正在寻找媒体事件 ,表示您可以使用例如loadeddata

我想谈谈其他一些问题:

  • 正则表达式字符组中的字符不需要转义。
  • 为什么不使用jQuery创建元素并绑定事件处理程序?

我稍微修改了你的代码:

 $.each(assets, function() { var r = /\.([^.]+)$/, ext = r.exec(this), //get file type tmp = ext[1] === 'png' ? $("") : $("