2012-02-17 3 views
1

私がやってJSベースのアプリケーションを起動する前に、私はすべての私の資産をプリロードしています:私は私の配列にちょうどpng秒を持って、まだ私はオーディオ(MP3ファイル)を追加するときにDOM要素を取得するとき、これは正常に動作しますオーディオファイル/イベントを事前にロードしますか?

​​

作成されましたが、決してonloadを起動することはありません。すでにtmp.load()を追加しようとしましたが、違いはありませんでした。また、ウェブ上の包括的な情報を実際に見つけることができませんでした。このアプローチは可能ですか? Audio()は適切なイベントを発生させますか?ありがとう!

+0

は 'preload'があなたのためには良い属性ないのですか? – Lloyd

答えて

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

関連する問題