编辑建议的修复:
这是工作的 jsFiddle
,这里是只有结果的演示。
如您所见,我完全重构了您原来的 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();
});