jQuery Masonry 仅定位一项时如何检测 layoutComplete?
How to detect layoutComplete when jQuery Masonry only positions one item?
我正在使用 Masonry 对许多文章进行布局,首先隐藏所有内容,并在触发 layoutComplete 时显示项目。当有不止一篇文章被定位时,这会按计划工作,但当有一篇文章存在时,布局将保持隐藏状态。我也在使用 Modernizr(参见下面的 sass)。
这是我的代码:
CSS (SASS):
.js-masonry, [data-masonry-options] {
@include media-query(lap-and-up) {
html.js & {
visibility: hidden;
}
html.js &.masonry-loaded {
visibility: visible;
}
}
}
Javascript:
var $container = $('.js-masonry').masonry();
$container.imagesLoaded( function() {
$container.masonry({
"columnWidth": ".grid-sizer",
"gutter": ".gutter-sizer",
"itemSelector": ".item",
"percentPosition": true
});
$container.masonry('on', 'layoutComplete', function() {
$container.addClass('masonry-loaded');
});
});
Masonry 如果确实向单个项目添加内联样式,但 layoutComplete 未触发。这有什么技巧吗,还是我发现了一个错误?
无法对此进行测试,但请尝试在 imagesloaded 之外调用 layoutcomplete。
var $container = $('.js-masonry').masonry();
$container.imagesLoaded( function() {
$container.masonry({
"columnWidth": ".grid-sizer",
"gutter": ".gutter-sizer",
"itemSelector": ".item",
"percentPosition": true
});
});
$container.masonry('on', 'layoutComplete', function() {
$container.addClass('masonry-loaded');
});
我不太清楚为什么我的代码不起作用,但我怀疑在初始化砌体和附加 onLayoutComplete 事件之间,它已经被触发了。回退到普通 JS 方法并在调用布局方法之前附加 layoutComplete 为我解决了这个问题。
var container = document.querySelector('.js-masonry');
var msnry = new Masonry( container, {
"columnWidth": ".grid-sizer",
"gutter": ".gutter-sizer",
"itemSelector": ".item",
"percentPosition": true
});
msnry.on('layoutComplete', function(laidOutItems) {
container.className = 'masonry-loaded';
});
imagesLoaded( container, function() {
msnry.layout();
});
我正在使用 Masonry 对许多文章进行布局,首先隐藏所有内容,并在触发 layoutComplete 时显示项目。当有不止一篇文章被定位时,这会按计划工作,但当有一篇文章存在时,布局将保持隐藏状态。我也在使用 Modernizr(参见下面的 sass)。
这是我的代码:
CSS (SASS):
.js-masonry, [data-masonry-options] {
@include media-query(lap-and-up) {
html.js & {
visibility: hidden;
}
html.js &.masonry-loaded {
visibility: visible;
}
}
}
Javascript:
var $container = $('.js-masonry').masonry();
$container.imagesLoaded( function() {
$container.masonry({
"columnWidth": ".grid-sizer",
"gutter": ".gutter-sizer",
"itemSelector": ".item",
"percentPosition": true
});
$container.masonry('on', 'layoutComplete', function() {
$container.addClass('masonry-loaded');
});
});
Masonry 如果确实向单个项目添加内联样式,但 layoutComplete 未触发。这有什么技巧吗,还是我发现了一个错误?
无法对此进行测试,但请尝试在 imagesloaded 之外调用 layoutcomplete。
var $container = $('.js-masonry').masonry();
$container.imagesLoaded( function() {
$container.masonry({
"columnWidth": ".grid-sizer",
"gutter": ".gutter-sizer",
"itemSelector": ".item",
"percentPosition": true
});
});
$container.masonry('on', 'layoutComplete', function() {
$container.addClass('masonry-loaded');
});
我不太清楚为什么我的代码不起作用,但我怀疑在初始化砌体和附加 onLayoutComplete 事件之间,它已经被触发了。回退到普通 JS 方法并在调用布局方法之前附加 layoutComplete 为我解决了这个问题。
var container = document.querySelector('.js-masonry');
var msnry = new Masonry( container, {
"columnWidth": ".grid-sizer",
"gutter": ".gutter-sizer",
"itemSelector": ".item",
"percentPosition": true
});
msnry.on('layoutComplete', function(laidOutItems) {
container.className = 'masonry-loaded';
});
imagesLoaded( container, function() {
msnry.layout();
});