编辑建议的修复:
这里是working jsFiddle
这是results only demo。
如您所见,我完全重构了您原来的 jQuery 代码。我从 Global 中删除了所有内容并删除了这些功能。 .resize() 已经需要一个函数,所以我只需在该函数内执行所有操作,然后立即调用 .resize() 在初始页面加载时调用它。
我做的另一个改变是向后增加你的 for 循环,从你允许的最宽的宽度开始 (5),一直到你允许的最小的宽度 (2)。
另外,在您的 for 循环中,我创建了 j 和 k 变量,以便更容易阅读这些条件。
主要变化是 if 语句。如果我们在 max_column 迭代中并且容器的宽度更宽 k,我们希望将板的宽度设置为 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();
});