私はJqueryを初めて使用しますが、次の問題があります。
アスペクト比を保ちながら画像のサイズを変更する関数を作成しました。読みやすくするために、このバージョンでは必要以上の「if」があります。html構造はそのようなものです。
<div class="post">
<div class="date"></div>
<div class="thumbnail">
<img class="img-thumb" />
</div>
<div class="post-body">
<p>...</p>
<img />
<p>...</p>
</div>
</div>
サイズ変更の場合(パディングを追加して画像を中央に配置します。コードのその部分に間違いはないと思います。)
$(window).load(function() {
var parentWidth = 250;//max width. In the real script i get the parent width inside the each but for the example a static value is ok
var parentHeight = 196;//max height
$('.img-thumb').each(function () {
var img=$(this);
var width = img.width(); //image width
var height = img.height(); //image height
var aspect = width/height;
var wide = width/parentWidth;
var tall = height/parentHeight;
if(width > parentWidth) {
if (wide > tall) {
width = parseInt(parentWidth,10);
height = parseInt(parentHeight/aspect,10);
}
}
if(height > parentHeight) {
if (tall > wide) {
height = parseInt(parentHeight,10);
width = parseInt(parentWidth*aspect,10);
}
}
margin_top = parseInt((parentHeight - height) / 2,10);
margin_left = parseInt((parentWidth - width ) / 2,10);
img.css({'margin-top' :margin_top + 'px',
'margin-left':margin_left + 'px',
'height' :height + 'px',
'width' :width + 'px'
});
});
});
そして、これが私の問題です。負荷がどのように機能するのか正確にはわかりません。つまり。これは機能しますが、すべての画像が読み込まれた場合にのみ機能します。しかし、2つの問題があります。1つ目は、すべてが読み込まれるのを待つ必要があることです。2つ目は、ユーザーにサイズ変更が表示されるため、最初に画像を非表示にして、show()で表示する必要があります。私はcssでそれを行うことができますが、この方法でjavascriptが無効になっている場合でも非表示になるので、jqueryで行うことを好みます。
私はその前に2番目の.eachを実行し、それらをすべて非表示にすることができますが、同じことのためにそれぞれを実行する2回目のdomに行くことは最善の解決策ではないと思います。では、負荷はどのように正確に機能しますか?
たとえば、これを行う場合:
$('.img-thumb').each(function () {
var parentWidth = 250;//max width. In the real script i get the parent width inside the each but for the example a static value is ok
var parentHeight = 196;//max height
var img=$(this);
img.hide();
img.load(function() {
var width = img.width(); //image width
var height = img.height(); //image height
var aspect = width/height;
var wide = width/parentWidth;
var tall = height/parentHeight;
if(width > parentWidth) {
if (wide > tall) {
width = parseInt(parentWidth,10);
height = parseInt(parentHeight/aspect,10);
}
}
if(height > parentHeight) {
if (tall > wide) {
height = parseInt(parentHeight,10);
width = parseInt(parentWidth*aspect,10);
}
}
margin_top = parseInt((parentHeight - height) / 2,10);
margin_left = parseInt((parentWidth - width ) / 2,10);
img.css({'margin-top' :margin_top + 'px',
'margin-left':margin_left + 'px',
'height' :height + 'px',
'width' :width + 'px'
}).show();
});
});
動作しません。私はまだサイズ変更を見ることができることを意味します。その理由は、最初の画像が読み込まれる前に、各ループの2番目の部分が実行されないためだと思います。では、ロードコードの範囲外を実行するようにjqueryに指示するにはどうすればよいですか?それぞれ2つ必要ですか?