Перезагрузка нового набора изображений делает высоту div в изотопе 0

0

Мой javascript выглядит следующим образом:

    <script type="text/javascript">
        $(document).ready(function() {
            // isotope
            var $container = $('#content');
            $container.imagesLoaded( function(){
                $container.isotope({
                    filter: '*',
                    itemSelector : '.element',
                    getSortData : {
                        colors : function( $elem ) {
                            return $elem.find('.colors').text();
                        },
                        number : function( $elem ) {
                            return $elem.find('.number');
                        }
                    }
                });

                var $sortedItems = $container.data('isotope').$filteredAtoms;

                // filter items when filter link is clicked
                $('#filter a').click(function(){
                    alert("filter");
                    var selector = $(this).attr('data-filter');
                    $container.isotope({ filter: selector });
                    return false;
                });

                // sorting
                $('#sort a').click(function(){
                    var sortType = $(this).attr('data-sort');
                    $container.isotope({ sortBy : sortType });
                    return false;
                });
            });
        });

        function updateContent(path, args) {
            $.ajax({
                url: (path+args),
                type: "POST",
                success: function( data ){

                    $(allCards).remove();
                    $("#content").html( data );
                    $('#content').isotope( 'reLayout', callback );
                }
            });
        }

        function callback() {
            alert("success: "+$('#content').height());
        }
    </script>

Всякий раз, когда я использую функцию updateContent(), высота div #content становится 0. Я думаю, что может произойти условие гонки из-за того, что контент не был полностью загружен и инициализирован изотоп до загрузки следующего набора изображений.

Он работает нормально, когда я впервые загружаю документ. Однако, когда я загружаю новый набор изображений с помощью updateContent(), он устанавливает высоту div #content равным 0. В идеале я хотел бы иметь возможность загружать новый набор изображений, и изотоп будет инициализироваться, как это обычно бывает, и высота должна быть соответствующее значение для всех изображений, помещенных внутри div #content.

Следующая часть должна быть исправлена, и это то, что у меня есть до сих пор...

$(allCards).remove(); // remove all previous images
$("#content").html( data ); // load new images
$('#content').isotope( 'reLayout', callback ); // <- reinit isotope to manage the new images

В основном я бы хотел, чтобы он удалял все предыдущие изображения и загружал все новые изображения в данные, а изотоп работал с новыми изображениями.

Теги:
jquery-isotope

2 ответа

3
Лучший ответ

Я решил проблему, добавив. Я делаю это так, чтобы люди не страдали, как я.

$("#content").isotope( 'remove', $(".element"), function(){
    $("#content").prepend($(data)).isotope( 'reloadItems' ).isotope({ sortBy: 'original-order' });
});
0

Взгляните на http://isotope.metafizzy.co/docs/methods.html.

Во-первых, убедитесь, что разметка, добавленная к $ ("# content"), имеет класс.element. Если у них их нет, вам нужно добавить их к ним, прежде чем пытаться вставить их в контейнер изотопа.

Во-вторых, попробуйте использовать встроенный метод для удаления добавочных объектов

.isotope( 'addItems', $items, callback )

В вашем случае это будет:

$("#content").isotope( 'remove', $(".element"), function(){
    $("#content").isotope( 'addItems', $(data), function(){
        $("#content").isotope( 'reLayout' callback );
    });
});

Вам, вероятно, не нужно использовать обратные вызовы из "remove" и "addItems", но без примера jsfiddle это трудно сказать.

  • 0
    Код, который вы предоставили, удаляет все элементы, но не добавляет эти элементы обратно. Ваш код легко понять и выглядит очень чисто, но я не уверен, почему он не работает.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню