Изотопы перекрывают изображения?

Похоже, это происходит только в Chrome и Safari, а не в Firefox. Я использую его с основой для создания основы, поэтому я не уверен, что делать с настройкой высоты. Также кажется, что нет достаточного расстояния между изображениями в Chrome/Safari.

Как это исправить?

Изменить: вот скрипка http://jsfiddle.net/TLjay/

Проблема с этим в том, что он, похоже, не отображает проблему, с которой я сталкиваюсь. Поэтому я не уверен, что с этим делать. Я пробовал отключить все, кроме изотопа.. все jquery/css, и он по-прежнему сжимает изображения в Chrome/Safari, но отлично работает в firefox.

Кроме того, если я попал в фильтр "Все", он растягивает страницу так, как ее должно выглядеть так, что может быть полезно при вычислении этого

Я получил его для работы с imagesLoaded, поэтому его предоставление достаточно места, но пространство слева и справа от изображений все еще не там, где оно должно быть.. my script находится ниже

<script type="text/javascript">
    var $container = $('.isosort')
    // initialize Isotope
        $container.isotope({
            // options...
            resizable: false, // disable normal resizing
            layoutMode : 'fitRows',
            animationEngine : 'best-available',

            // set columnWidth to a percentage of container width
            masonry: { columnWidth: $container.width() / 5 }
        });

        // update columnWidth on window resize
        $(window).smartresize(function(){
            $container.isotope({
            // update columnWidth to a percentage of container width
            masonry: { columnWidth: $container.width() / 5 }
            });
        });
        $container.imagesLoaded( function(){

                $container.isotope({
            // options...
                });
        });

        $('#filters a').click(function(){
            var selector = $(this).attr('data-filter');
            $container.isotope({ filter: selector });
            return false;
        });
    </script>

Ответы

Ответ 1

Обновить (исходный ответ был неправильным, потому что браузер использовал кешированные изображения..)

Проблема заключается в том, что изображения не загружаются и вычисления терпят неудачу.

Если вы завершите изотопный код в $(window).load(function(){ ..... });, он работает как ожидалось.

См. http://jsfiddle.net/TLjay/2/


Не уверен, почему это происходит, но простое обходное решение (поскольку оно фиксируется после изменения размера окна), чтобы вручную вызвать resize.

поэтому просто добавление $(window).resize(); в конце вашего кода исправляет его.

Демо на http://jsfiddle.net/TLjay/1/ Забастовкa >

Ответ 2

imagesLoaded работает, проверяя изображения, находящиеся в текущем элементе. Таким образом, в вашем случае это фактически ничего не делает в $(window).load(), поскольку в этом элементе нет элементов. Вместо этого я бы рекомендовал запускать imagesLoaded снова, после того, как элементы были вставлены с $.ajax.success

success: function(data){
    // Update isotope container with new data. 
    $container.isotope('remove', $container.data('isotope').$allAtoms )
    $container.isotope('insert', $(data) )
      // trigger isotope again after images have been loaded
      .imagesLoaded( function() {
        $container.isotope('reLayout');
      });
    }
});

Ответ 3

Вы должны убедиться, что вы предварительно загрузите все изображения до того, как вы назовете метод изотопа, вот демоверсия реального мира для этого: http://gbin1.com/gb/demoviewer/360/06242ba0-40a1-45fd-946f-cc89e0df64c9/index.html.htm, вы предварительно загрузите изображения с плагином jquery.imagesloaded.min.js, затем вызов изотопа, содержимое не будет перекрываться.