2013-11-14 4 views
1

Я пытаюсь скрыть свои изображения масонства до тех пор, пока страница не закончит загрузку, так как в настоящее время изображения загружаются в длинную полосу слева от экрана, прежде чем организовать себя.Масонство Скрыть изображения до полной загрузки

Я не могу заставить контейнер спрятаться, а затем показать, как только все остальное загружено.

Вот ссылка: http://inspiredworx-labs.com/sites/blg/

Вот мой сниппет (с комментарием код, который я пытался реализовать на скрыть/показать бит):

 <script> 
    $(window).load(function(){ 
      var $container = $('#masonry-container'); 
      // initialize 
      $container.masonry({ 
       //columnWidth: 60, 
       gutter: 6, 
       itemSelector: '.masonry-item' 
      }); 
    }) 

    /* 
      $('#masonry-container').hide(); 
      $container.imagesLoaded(function(){ 
       $('#masonry-container').show(); 
      })   
    */ 
    </script> 

ответ

2

Вы должны включать масонство экземпляр в своих изображениях imagesLoaded как так:

var $container = $('#masonry-container'); 
$container.imagesLoaded(function(){ 
    $container.masonry({ 
     itemSelector: '.masonry-item', 
     gutter: 6 
    }); 
}); 
+0

Когда я добавить этот фрагмент изображения остаться на левой подряд. EDIT: Я установил скрипт imagesLoaded и, похоже, теперь загружается быстрее? Есть ли способ скрыться, показывая, когда все изображения готовы? –

+0

На самом деле это не должно быть быстрее. Возможно, ваши изображения были просто кешированы. Вы можете скрыть все изображения по умолчанию при загрузке, но вам все равно нужно снова вызвать '$ container.masonry()', чтобы он правильно изменял элементы '.masonry-item'. – AfromanJ

0

Я не получаю все, что вы пробовали.

Но есть javascript библиотека, которая является «imagesLoaded». , который поможет вам я сделал это таким образом

// created a array with image and data 
var elemar = []; 
$.each(data, function(j,subData){ 

    var img = document.createElement('img'); 
    img.src = 'images.jpg'; 
    item.appendChild(img);       
    elemar.push(item); 
}); 

// loading div after image loaded 
imagesLoaded(elemar).on('progress', function(imgLoad, image) { 
     var item = image.img.parentNode;   
     container.appendChild(item);// container is an javascript , $('#containerdiv'), where all div will be publish 
     msnry.appended(item); // msnry intializaion 
     }); 
}); 
+0

Почему бы просто не вызвать 'imagesLoaded' в содержащем элементе? – AfromanJ

+0

Привет, я получаю данные через ajax, поэтому сначала я создал элементы dom, после чего вставил, b/c. Я не хочу отображать текст, если изображения загружаются. – developerCK

+0

Хм, интересный способ сделать это. – AfromanJ

Смежные вопросы