Packery + AJAX загруженный контент + ретрансляция пакетов

Я создаю макет с помощью библиотеки Packery из Metafizzy, где я перечисляю заголовки и миниатюры записей. После того, как они нажаты, я скрываю исходное содержимое, а затем ajax загружаю оставшуюся часть сообщения, чтобы заменить это исходное содержимое.

Я ищу советы о том, как бы я тогда ретранслировал упаковку, так как не могу заставить ее работать должным образом. Возможно, моя функция ajax должна отличаться, чтобы она работала. Загрузка ajax работает, но в пакете существует проблема с перекрытием.

 $(".modlink").click(function(){
        $(this).find('div.block:first').toggleClass("hidden");
        var post_link = $(this).attr("rel");
        $(this).find('article').toggleClass("d").fadeIn();
        $(this).find('div.hiddengems').toggleClass("showing");
        $(this).find('div.hiddengems').load(post_link); 
        $container.packery('layout');
    return false;
});

В любом случае. Я за любые советы и рекомендации по ajax + packery.

Примеры сайтов, использующих этот эффект. http://www.prohelvetia.ch/mobile http://www.typetoken.net/ (хотя это только добавление, но не удаление исходного контента)

2 ответа

Похоже, что Packery пытается построить сетку до загрузки всех изображений. Попробуйте использовать ImagesLoaded.js. Это сделано MetaFizzy и предназначено для использования с упаковкой.

http://imagesloaded.desandro.com/

Кроме того, я бы попробовал что-то вроде этого, чтобы загрузить и добавить новый элемент:

function appendPackeryElement() {
    $.ajax({
      method: "GET",
      url: "/theurl/"
    })
    .done(function( data ) {
        var $container = $('.your-packery-container');
        $container.packery( 'fit', data ).fadeIn();
    });
}

macksol совершенно прав: проблема в том, что изображения не загружаются вовремя, и чтобы это исправить, мы можем использовать собственные изображения Metafizzy, загруженные js: https://imagesloaded.desandro.com/

Я не мог, однако, использовать сценарий так, как его представил macksol.

Вот мой рабочий вызов JavaScript:

<script type='text/javascript'>
    $('.grid').imagesLoaded( function(){
        $('.grid').packery({
            itemSelector:'.grid-item', // these options should be modified for your layout
            percentPosition:true, // these options should be modified for your layout
            gutter:5 // these options should be modified for your layout
        });
    });
</script>

Удачи и всего наилучшего!

Другие вопросы по тегам