2013-04-13 10 views
6

複数のイメージのロードイベントを検出する方法があるのでしょうか(特に、特定のセットの最後のイメージのロードが完了した時点で関数を実行する必要があります)。複数のイメージを検出するロードイベント

たとえば、ユーザーがリンクをクリックすると、lighboxが10個の画像で表示されます。すべての画像がロードされると、ローディングバーが消えます。

jQuery(".lightbox-image").each(function(){ 
    var image = jQuery(this); 
    jQuery('<img />').attr('src', image.attr('src')).load(function(){ 
     hideLoadingBar(); 
    }); 
}); 

これは、残念ながら、あまりにも早く(1つのイメージのロードが完了した後に)hideLoadingBar();をトリガします。

P.S.
画像がキャッシュされた後に私の機能が必要になります。jQuery('#img1, #img2').load();は機能しません。

+0

これを参照してください。http://stackoverflow.com/a/9624426/235710 –

+0

@MohammadAdilこれは、画像が既にキャッシュされている場合は正しく動作しません。そして、私は 'hideLoadingBar()'を早く実行するので、手動で起動することはできません。 – Atadj

+0

もし私が間違っていない場合、ロードは常にajax reqです。あなたは進捗状況のコールバックを試しましたか? – steo

答えて

2

このjQuery imagesLoadedプラグインをご覧ください。あなたのニーズに合っているはずです。

1

誰も良いアイデアがないようですので、私の解決策/回避策は次のとおりです。この質問あなたはそれがそのために特別に作成したライブラリだが、ここで、それは短く、シンプルだから私が使用するつもりなソリューションですので、使用したいものはおそらくあるに他の答え:キャッシュされたイメージのため

var allImages = jQuery(".lightbox-image").length; 
var counter = 0; 
jQuery(".lightbox-image").each(function(){ 
    var image = jQuery(this).find('.myimage'); 
    jQuery('<img />').attr('src', image.attr('src')).load(function(){ 
     counter++; 
     if(counter >= allImages){ 
      hideLoadingBar(); 
     } 
    }); 
}); 

作品とキャッシュされたイメージではありません。

+0

私はlibを使うことは、このような単純な作業のための良い考えではないと思います。 –

+0

この機能が実行されているときに、現在ロードされている画像がかなり大きい(例えば、10程度)場合、この解決策はどうなりますか?その後、あなたは同じイメージの別の10ダウンロードを開始します、そうではありませんか?おそらく、パフォーマンスの低下があなたに受け入れられるでしょう。 –

+0

ブラウザの特徴を確認してください([プラグインのページに記載されています])(https://github.com/desandro/imagesloaded/wiki/Browser-quirks)。 –

関連する問題