2012-01-27 5 views
4

Javascriptライトボックスを構築していて、イメージがロードされたらサイズを調整しようとしています。私は下のコードを使用しています。これはうまくいきます - 一度読み込まれると正しい幅を出力します。キャッシュされたときに画像の幅がゼロになります。

私の問題:私は更新すると

、それがキャッシュから瞬時にイメージをロードし、負荷をバイパスするようです。私は幅の瞬間ゼロを得ます。なぜこれが起こるのですか?

マイコード:**

var oImage = new Image(); 

oImage.src = 'http://mydomain.com/image.png'; 

container.html(oImage); 

oImage.onload = function(){ 

    alert(this.width); 
} 

更新* *

@Alex:これは私があなたのプラグインを試してみたコードで、私はおそらくだと仮定何か間違っている。私はあなたのプラグインがかなりよく見えるので、これを動作させることを熱望しています。

container.waitForImages(function() { 

    var cWidth = $(this).width(); 

    alert("width: "+cWidth); // returns 0 - works first time but not cached 

}); 

// Adding the image to the container for preload 

container.html('<img src="mygraphic.png" />'); 
+1

[my plugin](https:// github。)のコードを調べることができます。com/alexanderdickson/waitForImages)を参照してください。 – alex

+0

@alex、あなたのプラグインを共有してくれてありがとう!解決策をここで答えとしてまとめることができれば幸いです。もしそうでなければ、うまくいけば誰かがもうすぐこれが私にとって大きな問題だからです。 – dkamins

+0

onloadハンドラをHTMLに挿入する前に設定してみましたか? –

答えて

3

あなたは.html().onload()通話を切り替えたいことがあります。

画像がキャッシュからロードされている場合は、私は.html()コールは、スクリプトは、画像のonloadイベントに関数ハンドラをアタッチする機会があった前に完了したことを想像しています。したがって、負荷イベント自体を効果的にバイパスすることができます(画像にはが既にロードされているため、画像はです)。

画像がまだキャッシュされていない場合は、.onloadの添付ファイルを完全に呼び出すまでに十分な時間がかかります。

あなたはそれをやっている間に、jQueryのやり方をしたいと思うかもしれません。ちょうどあなたがDOM0よりもDOM2に似たイベントを付けているようです。

var image = $('<img/>', { 
    src : 'http://mydomain.com/image.png' 
}).load(function() { 
    alert(this.width); 
}) 
// maybe clear container before if you want 
.appendTo(container); 

我々はonloadsrcを設定する必要があるとしている場合は、我々としても代わりにこれを行う可能性があります:

var image = $('<img/>') 
    .load(function() { 
     alert(this.width); 
    }) 
    .attr('src','http://mydomain.com/image.png') 
    .appendTo(container) 
    ; 

きれいに動作しますうまくいけば。

+0

アドバイスをいただきありがとうございます。私はあなたの例を試してきましたが、実際に要素をページに追加するとすぐに、幅はトレースできません。私は、実際の負荷の中にappendコマンドを置くことによって動作させることができることを発見しました。/ – JCraine

+0

これは後で問題を引き起こす可能性がありますか?また、「画像」以外のもの、例えばにFlashをロードするなどの負荷を追跡することは可能ですか? – JCraine

+0

Arg、IE7では動作しません。私はこれが嫌い – JCraine

4

を設定する前にonloadを設定すべきことを示唆している...

  • img要素のcompleteプロパティを確認してください。
  • loadイベントをアタッチしてからsrcプロパティを設定してください。

また、私は新しいImageを作成し、イメージがロードされたりしていないかどうかを判断するための最良の方法があるsrcを割り当てました。

+0

あなたのJSプラグインをチェックアウトしたが、動作しているようだが、コンテナにイメージがロードされた後 - コンテナの幅をトレースしようとすると、コンテナが新しいサイズ。 – JCraine

+0

こんにちはアレックス、私はあなたのプラグインを使用してコードで私の最初のポストを更新しました。時間があればチェックしてください、歓声。 – JCraine

+0

@JCraine問題のhttp://jsfiddle.netをセットアップすることができれば、喜んでお手伝いします。 – alex

関連する問題