2012-01-19 15 views
3

ウィンドウのサイズよりも大きい画像のサイズを変更したいのですが、イメージのサイズを取得します。イメージが必ず(ドキュメント).readyに読み込まれるわけではないので、イメージ関数は(window).loadの下に置く必要がありますが、それは役に立たないのです。私はそれがjqueryとjavascriptになると真の初心者ですので、私は何か間違っている可能性があります。

これは私のjavascriptのファイルがどのように見えるかです:事前に

//<!-- 
$(document).ready(function(){ 
    ... 
}); 

$(window).load(function() { 

    $(".lightbox img").each(function() { 

     var width = $(this).width(); 
     var max_width = $(window).width()-30; 
     var height = $(this).height();   
     var max_height = $(window).height()-30; 

     if(width > max_width || height > max_height) { 
      if(height > width) { 
       height = max_height; 
       width = Math.ceil(width/height * max_height); 
      } else { 
       width = max_width; 
       height = Math.ceil(height/width * max_width); 
      } 
     } 

     $(this).attr("width",width); 
     $(this).attr("height",height); 

    }); 
}); 

//--> 

感謝。

+0

これはページ上部のスクリプトタグにありますか? – Jivings

答えて

0

$(this).css("width")をお試しください。

ディメンションを取得できない別の理由は、目に見えない要素(親または自己)です。

+0

はい、目に見えない要素です(イベントの後に表示されます)。私はそれが完璧な意味を持っているとは思っていませんでした。要素が可視にされた後、サイズを取得し、それは動作します、ありがとう! – Sandra

+0

素晴らしい!喜んで助けてください:) –

0

はイメージがロードされているコールバックを提供しthis projectを見てみましょ代わりattr

0

ウィンドウが読み込まれると、画像がまだ読み込まれていない可能性があります。 が完全にになるまで、JavaScriptは画像の寸法を取得できません。それまではゼロの計算値が得られます。

これを念頭に置くと、繰り返しループが役立ちます。 (警告:テストされていません)

var width = 0; 
while (!width) { 
    width = $(this).width(); 
} 

無限ループに注意してください。

+0

これは実際にイメージの読み込みを停止しませんか?私は本当にこのようにwhileループを使うことを勧めません。 '$(this).on(" load "、...);'を使うのはいかがですか?イメージには 'load'イベントもあります。 – pimvdb

関連する問題