Я знаю, что InfiniteScroll и Masonry хорошо работают вместе. Но я использую расширение Infinite Scroll Extension для Yii (называемое yiinfinite-scroll) и пробовал применить к нему масонство. Infinite Scroll для себя работает отлично, Masonry для себя тоже. Но после того, как InfiniteScroll пытается загрузить новый набор изображений (у меня есть страница изображений), часть обратного вызова InfiniteScroll, похоже, не срабатывает, потому что недавно добавленные элементы не имеют кода каменной кладки и появляются позади первые видимые предметы. (Я знаю, что об этой ошибке сообщают часто, но решения, которые я нашел до сих пор, у меня не работали).
Моя структура для показа картинки выглядит так:
<div class="items">
<div class="pic">...</pic>
<div class="pic">...</pic>
...
</div>
Первая загрузка страницы выглядит так
<div class="items masonry" style="...">
<div class="pic masonry-brick" ...></div>
<div class="pic masonry-brick" ...></div>
...
</div> // everything's fine, masonry is injected into the code
После бесконечной прокрутки динамически загружаются новые изображения, они выглядят следующим образом:
<div class="items masonry" ...></div>
<div class="pic masonry-brick" ...></div>
...
// appended pics:
<div class="pic"></div>
<div class="pic"></div>
</div> // so no masonry functionality was applied
Мой масонский кодекс:
$(function (){
var $container = $('.items');
$container.imagesLoaded(function(){
$container.masonry({
itemSelector: '.pic',
columnWidth: 405
});
});
});
$container.infinitescroll({
// normally, the options are found here. but as I use infinitescroll as a Yii extension, the plugin is already initiated with options
}
},
// trigger Masonry as a callback
function( newElements ) {
// hide new items while they are loading
var $newElems = $( newElements ).css({ opacity: 0 });
// ensure that images load before adding to masonry layout
$newElems.imagesLoaded(function(){
// show elems now they're ready
$newElems.animate({ opacity: 1 });
$container.masonry( 'appended', $newElems, true );
});
});
});
Я также попытался скопировать и заменить текущий файл InfiniteScroll-min.js в папке расширений на самый новый. Тот же эффект ...
С уважением, Себастьян