serovpochta
@serovpochta
Лысый

Почему masonry сетка не полностью срабатывает при загрузке?

Здесь

при загрузке страницы превьюшки не сразу выстраиваются должным образом
Кажется дело в вспомогательном скрипте imagesloaded.pkgd
Насколько знаю, скрипт определяет заранее величину изображений..

$(document).ready(function() {

  var $boxes = $('.loop');

  var $container = $('#content_masonry');
  $container.imagesLoaded( function() {
    $boxes.fadeIn(100);

    $container.masonry({
        itemSelector : '.loop',
        columnwidth: 330,
        gutter: 26,
        isFitWidth: true,
        isAnimated: !Modernizr.csstransitions
    });    
  });
});


Но я не знаю решения
Помогите плиз =)

Спасибо за внимание
  • Вопрос задан
  • 895 просмотров
Решения вопроса 1
lazalu68
@lazalu68
Salmon
Если нужно чтобы сетка инициализировалась моментально, то одно из решений уже привели - фиксировать размеры изображений (блоков). Ещё одно возможное решение - добавлять блок в сетку только тогда, когда соответствующее изображение загрузится. По вкусу можно приправить анимашкой при добавлении элемента, прелоадером и т.д.

Но мне кажется лучше всего строить сетку с исходными размерами блоков, а при загрузке изображений просто увеличивать высоту колонок, как-то так (наведите курсор на блок).
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
Masonry срабатывает до того, как загрузятся картинки.
Приведу способы решения сей проблемы отсюда:

Способ 1

Установить для всех изображений размеры жестко: ширину и высоту в пикселях.

Способ 2

Повесить обработку Масонри на событиеload. Код для jQuery:

jQuery(window).load(function(){
jQuery('.masonry').masonry({ columnWidth:310, itemSelector:'.box, .item' });
});
Минус этого способа в том, что тут скорее всего придется ждать загрузки всего "окна": jQuery(window).load. Использовать load отдельно для элемента редко допустимо, потому что jQuery будет интерпретировать его как AJAX функцию load. Чтобы этого избежать используйте 3-й пример.

Способ 3

Инициализировать работу Масонри, после того, как все картинки будут загружены. А для проверки загрузки использовать дополнительный JS скрипт imagesLoaded. Код:

var container = document.querySelector('#container');
var msnry;
// Инициализация Масонри, после загрузки изображений
imagesLoaded( container, function() {
msnry = new Masonry( container );
});
Код для jQuery:

var $container = $('#container');
// Инициализация Масонри, после загрузки изображений
$container.imagesLoaded( function() {
$container.masonry();
});
Заметка: также ошибка может быть при использовании дополнительных шрифтов, поэтому загрузку шрифтов нужно проверять.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы