प्रस्तावित सुधार के लिए संपादित करें:
यहाँ working jsFiddle है और यहाँ results only demo है।
जैसा कि आप देख सकते हैं, मैंने पूरी तरह से आपके मूल jQuery कोड को फिर से पहचाना। मैंने ग्लोबल से सब कुछ हटा दिया और साथ ही कार्यों को बाहर निकाला। .resize()
पहले से ही एक फ़ंक्शन की अपेक्षा करता है, इसलिए मैं बस उस फ़ंक्शन के अंदर सबकुछ करता हूं और फिर प्रारंभिक पृष्ठ लोड पर इसे आमंत्रित करने के लिए तत्काल .resize()
पर कॉल करता हूं।
एक और परिवर्तन मैंने बनाया अधिकतम संभव चौड़ाई आकार के साथ शुरू, पीछे की ओर अपने लिए लूप को बढ़ाने के लिए किया गया था आप अनुमति देते हैं (5), मेरे रास्ते छोटी संभव चौड़ाई आकार आप अनुमति देने के लिए नीचे काम कर (2)।
इसके अलावा, आपके लूप के अंदर, मैंने j
और k
वेरिएबल बनाए हैं ताकि उन शर्तों को पढ़ने में आसानी हो सके।
मुख्य परिवर्तन अगर कथन था। यदि हम max_column पुनरावृत्ति पर हैं और कंटेनर की चौड़ाई व्यापक k
है, तो हम बोर्ड की चौड़ाई k
पर सेट करना चाहते हैं और लूप के लिए बाहर निकलना चाहते हैं, अन्यथा हम आपके द्वारा दिए गए कथन के मूल का मूल्यांकन करते हैं, अन्यथा यदि हम हैं min_column पुनरावृत्ति और कंटेनर की चौड़ाई j
से कम है, हम बोर्ड की चौड़ाई j
पर सेट करना चाहते हैं।
मैंने क्रोम में इसका परीक्षण किया और यह खूबसूरती से काम करता है। मैं आशान्वित हूं कि इससे आपको सहायता मिलेगी।
$(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();
});
यह आईई को आकार बदलने की घटना को अक्सर फायर करने से रोकने के लिए है, जिससे व्यावहारिक रूप से अपने घुटनों पर आ रहा है ... – Matijs
बस ओपी को यह कहने के लिए अपडेट किया गया कि मैंने यह परीक्षण किया है कि यह क्रोम और फ़ायरफ़ॉक्स है। परीक्षण आईई और एक ही परिणाम मिला, सबकुछ पूरी तरह से काम करता है लेकिन तत्व का आकार बदलने से पहले फ़ंक्शन लग रहा है (या इससे पहले तत्व ने इसका आकार बदल दिया है)। –
क्या आप संभवतः अपनी समस्या का प्रदर्शन करने के लिए [jsbin] (http://jsbin.com) या [jsFiddle] (http://jsfiddle.net) बना सकते हैं? –