私は流体レイアウトプロジェクトに取り組んでいます。ドキュメントに高さ固定の DIV がいくつかありますが、高さがすべて異なります。ブラウザーのサイズ変更時に、これらの DIV の高さを比例的に変更する必要があります。これがマークアップです。
<body>
<div id="a" class="target"></div>
<div id="b" class="target"></div>
<div id="c" class="target"></div>
</body>
そしてCSS:
<style>
body { width: 90%; margin: 0 auto;}
.target { width:30%; float:left; margin:1.6%; cursor:pointer; }
#a { height: 200px; background-color: yellow;}
#b { height: 400px; background-color: green;}
#c { height: 600px; background-color: grey;}
</style>
簡単ですね!主な条件は、ターゲット DIV とその ID の正確な量がわからないことです。そのため、.each(function()) を使用しています。ここに私が書いたスクリプトがあります:
$(document).ready(function(){
//set the initial body width
var originalWidth = 1000;
/*I need to go through all target divs because i don't know
how many divs are here and what are their initial height*/
$(".target").each(function()
{
//get the initial height of every div
var originalHeight = $(this).height();
//get the new body width
var bodyWidth = $("body").width();
//get the difference in width, needed for hight calculation
var widthDiff = bodyWidth - originalWidth;
//new hight based on initial div height
var newHeight = originalHeight + (widthDiff / 10);
//sets the different height for every needed div
$(this).css("height", newHeight);
});
});
このスクリプトは、ユーザーがページをリロードすると完全に機能します。ユーザーがリロードせずにブラウザのサイズを変更すると、どうすれば同じ結果を動的に得ることができますか? $(window).resize イベントリスナーを適用する必要があることはわかっています。しかし問題は、DIV の最初の高さがイベント内で計算され、結果がほぼ無限ループのようになることです。つまり、最終的な高さが大幅に増加または減少します。私はそれを必要としません!イベント関数の外側で各DIV の初期高さを計算し、イベント関数内でこれらの高さを使用するにはどうすればよいですか? それとも、同じ結果を得るための別のアプローチがあるのでしょうか?