提案された修正の編集:
これが動作中のjsFiddle
であり、これが結果のみのデモです。
ご覧のとおり、元のjQueryコードを完全にリファクタリングしました。グローバルからすべてを削除し、機能を削除しました。 すでに関数を期待しているので、その1つの関数内ですべてを実行し、最初のページの読み込み時に.resize()
すぐに呼び出して呼び出します。.resize()
私が行ったもう1つの変更は、forループを逆方向にインクリメントすることでした。まず、許可する可能な限り広い幅のサイズ(5)から始めて、許可される可能な限り小さい幅のサイズ(2)まで減らしていきます。
また、forループ内で、これらの条件を読みやすくするために変数を作成j
しました。k
主な変更はifステートメントでした。max_columnの反復を実行していて、コンテナーの幅が広いk
場合は、ボードの幅をforループに設定してk
、forループからジャンプします。それ以外の場合は、元のifステートメントを評価します。それ以外の場合は、min_columnの反復を実行します。コンテナの幅が。未満の場合j
、ボードの幅をに設定しj
ます。
私はこれをChromeでテストしましたが、うまく機能します。これがお役に立てば幸いです。
$(document).ready(function()
{
$(window).resize(function()
{
var item_width = 200,
item_height = 300,
gap = 20,
min_columns = 2,
max_columns = 5,
min_width = min_columns * (item_width + gap),
max_width = max_columns * (item_width + gap),
container_width = $(".display_container").width(),
$display_board = $("#display_board"),
$display_board_ol_li = $display_board.find("ol > li");
//console.log("container width: " + container_width);
for (var i = max_columns; i >= min_columns; i--)
{
var j = i * (item_width + gap),
k = (i+1) * (item_width + gap);
//console.log("j: " + j);
//console.log("k: " + k);
//console.log("display_board width (before): " + $display_board.css("width"));
if (i === max_columns && container_width > k)
{
$display_board.css("width", max_width + "px");
//console.log("display_board width (after): " + $display_board.css("width"));
break;
}
else if (container_width > j && container_width < k)
{
$display_board.css("width", j + "px");
//console.log("display_board width (after): " + $display_board.css("width"));
break;
}
else if (i === min_columns && container_width < j)
{
$display_board.css("width", min_width + "px");
//console.log("display_board width (after): " + $display_board.css("width"));
}
}
$display_board_ol_li.css({
"width" : item_width + "px",
"height": item_height + "px",
"margin": gap/2 + "px"
});
}).resize();
});