画像や動画を lightbox 風に表示する拙作の jQuery 用プラグイン jQuery.lightpop.js ですが、画像の拡大表示で大きな問題がありました。
以下のようにサムネイル表示されている画像と、リンク先の画像が同一で、サムネイル表示している画像を width, height で小さく表示している場合、画像本来のサイズ(幅, 高さ)が取得できないため、正常に表示できないのです。
<a href="pict01.jpg" rel="lightbox" title="画像1"><img src="pict01.jpg" alt="画像1" width="160" height="120"></a>
困ったなぁと思いつつも、画像本来のサイズを取得する方法について調べずに放置していましたが、以下のエントリを読んで解決したので、久々に jQuery.lightpop.js をバージョンアップします。
JavaScript で、画像本来のサイズ(幅, 高さ)を取得する方法 – latest log
各主要ブラウザでの取得方法は、以下のとおり
- Firefox, Safari, Chrome などのブラウザでは、image オブジェクトに naturalWidth, naturalHeight というプロパティから取得可能
- IE では runtimeStyle を利用して取得可能
- Opera では naturalWidth も runtimeStyle も無いので image オブジェクトから、width, height を removeAttribute すれば取得可能
と言うわけで、いかのようにして取得することにしました。
// get Image true size var img_true_size = function(image){ var w = image.width , h = image.height ; if ( typeof image.naturalWidth !== 'undefined' ) { // for Firefox, Safari, Chrome w = image.naturalWidth; h = image.naturalHeight; } else if ( typeof image.runtimeStyle !== 'undefined' ) { // for IE var run = image.runtimeStyle; var mem = { w: run.width, h: run.height }; // keep runtimeStyle run.width = "auto"; run.height = "auto"; w = image.width; h = image.height; run.width = mem.w; run.height = mem.h; } else { // for Opera var mem = { w: image.width, h: image.height }; // keep original style image.removeAttribute("width"); image.removeAttribute("height"); w = image.width; h = image.height; image.width = mem.w; image.height = mem.h; } return {width:w, height:h}; }
なるほどね。jQueryもMooToolsもサポートしてないっぽいのはなぜだろう? > JavaScript で画像本来のサイズ(幅, 高さ)を取得する http://t.co/TFKbROIn @wokamotoさんから
JavaScript で画像本来のサイズ(幅, 高さ)を取得する : dogmap.jp http://htn.to/qH57z
本来の画像サイズ
imgのサイズの取り方 | JavaScript で画像本来のサイズ(幅, 高さ)を取得する : dogmap.jp
http://goo.gl/jkh3Y
.
ピンバック: [お手軽実装]画像を表示する際に、一定以上の幅を超えた画像を縮小する。 | 岐阜20年目ノート
JavaScript で画像本来のサイズ(幅, 高さ)を取得する http://bit.ly/kAK22
ピンバック: noise
JavaScript+で画像本来のサイズ(幅,+高さ)を取得する http://t.co/qqsegGJ
JavaScript で画像本来のサイズ(幅, 高さ)を取得する : dogmap.jp http://htn.to/s6it48
@wokamoto これすばらしい。使わせてください。> JavaScript で画像本来のサイズ(幅, 高さ)を取得する : dogmap.jp http://bit.ly/cQrKxC
各主要ブラウザでの取得方法は、以下のとおり
* Firefox, Safari, Chrome などのブラウザでは、image オブジェクトに naturalWidth, naturalHeight というプロパティから取得可能
* IE では runtimeStyle を利用して取得可能
* Opera では naturalWidth も runtimeStyle も無いので image オブジェクトから、width, height を removeAttribute すれば
http://dogmap.jp/2009/06/17/javascript-image-natural-size-2/
*
ただ、これのIE版がうまくいかない・・・。
http://dogmap.jp/2009/06/17/javascript-image-natural-size-2/
だれかおせーて・・・。
濃いなあ
runtimeStyle
ピンバック: ibushiの日記
jQueryでheight(), width()使うのとあまり変わらない気がする