重新加载一组新图像使得同位素中的div高度为0

时间:2013-10-20 00:46:42

标签: javascript jquery jquery-isotope

我的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()函数时,#content div的高度变为0.我认为由于内容未完全加载而且同位素初始化在下一组图像之前可能会发生竞争条件加载。

首次加载文档时,它工作正常。然而,当我使用updateContent()加载一组新图像时,它将#content div height设置为0.理想情况下,我希望能够加载一组新图像,并且同位素会像通常那样初始化并且高度应该是适合#content div的所有图像的适当值。

以下部分需要修复,这是我到目前为止......

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

基本上我希望删除所有以前的图像并将所有新图像加载到数据中,同位素将与新图像一起使用。

2 个答案:

答案 0 :(得分:3)

我通过前置解决了这个问题。我正在这样做,所以人们不必像我一样受苦。

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

答案 1 :(得分: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示例,则很难说。