1

プリローダーイメージを作成したかったのですが、すでにlodeadイメージをチェックすることに固執していました。

var imgContainer = [];

$(this).find('img').each(function() {
    imgContainer.push({
        image: $(this)
        // other properties
    })
});

setInterval(function() {
    console.log(imgContainer[0].image.complete);  // undefined
}, 2000);

しかし、このソリューションは機能しました(配列内のオブジェクトなしで):

var imgContainer = $(this).find('img');

setInterval(function() {
    console.log(imgContainer[0].complete)         // true
}, 2000);

なぜ機能しないのですか?

4

2 に答える 2

1

を使用する代わりにsetInterval、すべての画像が読み込まれているかどうかを確認するには、上記のコードを次のコードに置き換えます。

(function(that){
    var remains = 0;        
    var loadHandler = function(){
       if(--remains == 0){
          console.log('All images are loaded !!!');
       }   
    };

    $(that).find('img').each(function() {
         if( !this.complete ){
             remains++;
             $(this).load(loadHandler);
         }
    });        
})(this);
于 2012-04-14T21:10:42.087 に答える
0

コードでは、jQueryオブジェクトの「complete」属性にアクセスしようとしていますが、これはありません。代わりに、DOM要素自体の完全な属性にアクセスしてみてください。

私はこのコードがうまくいくはずだと信じています:

var imgContainer = [];

$(this).find('img').each(function() {
    imgContainer.push({
        image: $(this)
        // other properties
    })
});

setInterval(function() {
    /* imgContainer = array with objects, [0] = get first element */
    /* image = jQuery collection, [0] = get dom element of the first item in the collection */
    console.log(imgContainer[0].image[0].complete);  
}, 2000);
于 2012-04-14T21:05:07.903 に答える