動的に作成された画像タグを使用して、画像のサイズを取得する必要があります。できます。ただし、attr('width')を使用する場合と、画像をDOMに追加しない場合のみを使用してください。それ以外の場合、返される次元はゼロです。なんで?:)
this.img = $('<img/>', {'src': e.url} ); // generate image
this.img.appendTo('body'); // add to DOM
this.img.load(function(self){return function(){ // when loaded call function
console.log(self.img.attr('src'));
console.log(self.img.attr('width'));
console.log(self.img.width());
console.log(self.img.css('width'));
}; }(this) ); // pass object via closure
そこで、画像を生成してDOMに追加し、画像が読み込まれたときに呼び出されるハンドラー関数を定義します。クロージャーを使用して、クロージャー内の「自己」と呼ばれる元のオブジェクトへの参照を渡します。参照が正常であることを確認するために、画像のURLをダンプしています。出力は次のとおりです。
pic.jpg
0
0
0px
ここで奇妙なことがあります。上の2行目(appendTo)を削除すると、突然機能しますが、attr('width')の場合のみです。
pic.jpg
1024
0
0px
この振る舞いは私には意味がありません。上記の6つのケースすべてで実際の画像サイズを取得することを期待しています。問題を回避する方法はわかりましたが、なぜそれが発生するのかを理解したいと思います。バグですか?それとも、それに論理的な理由がありますか?
上記の結果はSafariの場合です。Chromeでテストしたところ、最初の例ではすべて正しい値が得られましたが、2番目の例ではまだ2つのゼロがあります。とても奇妙です。