就像我认为我在让 Masonry 更具响应性方面取得了进展......
我用这段代码给 Masonry 打电话:
jQuery(document).ready(function($) {
var CollManag = (function() {
var $ctCollContainer = $('#grid'),
collCnt = 1,
init = function() {
changeColCnt();
initEvents();
initPlugins();
},
changeColCnt = function() {
var w_w = $(window).width();
if( w_w <= 480 ) n = 1;
else if( w_w <= 700 ) n = 2;
else n = 3;
},
initEvents = function() {
$(window).on( 'smartresize.CollManag', function( event ) {
changeColCnt();
});
},
initPlugins = function() {
$ctCollContainer.imagesLoaded( function(){
$ctCollContainer.masonry({
itemSelector : '.box_item',
columnWidth : function( containerWidth ) {
return containerWidth / n;
},
isAnimated : true,
animationOptions: {
duration: 250
}
});
});
};
return { init: init };
})();
CollManag.init();
});
它根据视口宽度更改砌体柱。
我已经剥离了我的 HTML/CSS,所以我只有一些图像包装在一个 div (.box_item) 中。这些 div 具有基于百分比的宽度(我知道使用 % 的浏览器舍入问题)。
一切运行良好,当我减小浏览器宽度时,我的网格相应地从 3、2、1 列更改。我对容器之间的间距特别满意(一切看起来都一样)。
如果我将浏览器的大小调整到 700 像素,我们的所有间距都是相等的(由于浏览器对我的尺寸进行了四舍五入,在最右侧稍大一些)。如果我在这个视口刷新浏览器,排水沟的宽度会稍微改变。如果我将浏览器的大小调整 1 像素,我的网格间距会重置。
访问某些视口的人比我为他们调整浏览器的大小更重要 :) 知道可能导致此问题的原因是什么吗?99% 确定它与 CSS 无关,因为我已经将所有内容都剥离了。
更新:已将原始脚本替换为以下脚本(问题仍然存在):
// load masonry / change layout based on view port
$(document).ready(function(){
var $container = $('#grid');
var gutter = 20;
var min_width = 230;
$container.imagesLoaded( function(){
$container.masonry({
itemSelector : '.box_item',
gutterWidth: gutter,
isAnimated: true,
columnWidth: function( containerWidth ) {
var box_width = (((containerWidth - 2*gutter)/3) | 0) ;
if (box_width < min_width) {
box_width = (((containerWidth - gutter)/2) | 0);
}
if (box_width < min_width) {
box_width = containerWidth;
}
$('.box_item').width(box_width);
return box_width;
}
});
});
});