Javascript-форум (https://javascript.ru/forum/)
-   Элементы интерфейса (https://javascript.ru/forum/dom-window/)
-   -   Masonry проблема с Chrome / загрузка с imagesloaded (https://javascript.ru/forum/dom-window/53799-masonry-problema-s-chrome-zagruzka-s-imagesloaded.html)

misterdc 18.02.2015 15:27

Masonry проблема с Chrome / загрузка с imagesloaded
 
Доброго времени суток)

Скрипт masonry позволяет иметь структуру блоков как на сайте pinterest (вдруг кто не знает))
https://github.com/desandro/masonry

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

Эта проблема решается с помощью скрипта imagesLoaded.
https://github.com/desandro/imagesloaded

Но как? Я не понимаю, т.к. плохо знаю js, можете помочь с этим?

Собственно, сейчас ситуация следующая:
сайт на joomla, в хедере подключены скрипты:
<script src="/templates/rt_chimera/js/imagesloaded.pkgd.min.js"></script>
<script src="/templates/rt_chimera/js/masonry.pkgd.min.js"></script>

Для запуска masonry, я добавляю к родительскому div класс "js-masonry", как прописано вот тут: http://masonry.desandro.com/#init-with-html

Вот тут, вроде как объясняется, как использовать imagesLoaded скрипт, но я не пойму, как?
http://masonry.desandro.com/appendix.html

Объясните, пожалуйста) что и куда копировать?

рони 18.02.2015 18:11

misterdc,
jquery есть?

рони 18.02.2015 18:42

misterdc, удалите ваш второй пост он только картину портит
и вам для медитации - не ставить класс js-masonry, можно любой другой ... строки 18 - 25 для теста ... остальное нужно.
<!DOCTYPE HTML>
<html>
<head>
  <title>Untitled</title>
  <meta charset="utf-8">
  <style type="text/css">
     .block_info{
       width: 600px;
     }
    img { width: 25%; }
  </style>
  <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>
  <script src="https://cdnjs.cloudflare.com/ajax/libs/masonry/3.2.2/masonry.pkgd.js"></script>
  <script src="https://imagesloaded.desandro.com/imagesloaded.pkgd.js"></script>
  <script>
     $(function(){
  var s = $(".block_info");
         function more() {
             $.each(Array(Math.round(Math.random() * 50 + 11)), function(indx, element) {
                 $('<img/>', {
                     'src': 'https://tympanus.net/Development/AutomaticImageMontage/images/' + (Math.round(Math.random() * 72 + 1)) + '.jpg'
                 }).prependTo(s)
             });
         }
        more()
 var $container = $('.block_info');
 $container.imagesLoaded( function() {
  $container.masonry({columnWidth: 150,
  itemSelector: 'img'});
});
});
</script>
</head>
<body>
<div class='block_info'></div>
</body>
</html>

misterdc 18.02.2015 19:14

Благодарю вас,рони) Все работает)

misterdc 19.02.2015 17:42

время от времени это не срабатывает и все съезжает опять. Почему так?

misterdc 19.02.2015 17:47

Может есть какой-нибудь альтернативный скрипт?

рони 19.02.2015 18:56

misterdc,
как вариант сделайте загрузку не $(function(){...
а без всяких дополнительных плагинов
$(window).load(function(){ 
var $container = $('.block_info');
$container.masonry({columnWidth: 150,
  itemSelector: 'img'});
});})

misterdc 19.02.2015 19:11

Может я что-то не так делаю?
Я вставляю этот скрипт в виде:
<script>
	$(window).load(function(){ 
var $container = $('.block_info');
$container.masonry({columnWidth: 150,
  itemSelector: 'img'});
});})
</script>

вставляю его в саом конце хедера, прямо перед </head>
В браузере проверяю - скрипт на месте. Ошибок нет. Но страницы в хроме продолжают загружаться по настроению - кусок как надо, кусок съехал, потом вся как надо, потом вся съехала. Причем это не зависит от того, закэшированы ли изображения

misterdc 19.02.2015 19:22

Вчера это просто совпадение было - присутствие или отсутствие того скрипта тоже ни как не изменяет ситуацию

рони 19.02.2015 19:24

misterdc,
может ссылку в личку

рони 19.02.2015 19:27

misterdc,
и может не $ а jQuery

stankura 23.02.2015 17:25

Может есть какой-нибудь альтернативный скрипт?

maritca 09.04.2015 22:11

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

kostyanet 10.04.2015 16:34

Цитата:

Сообщение от misterdc
вставляю его в саом конце хедера, прямо перед </head>

Скриптам на событии load абсолютно параллельно где они находятся в потоке. Браузер дошел - исполнил, по событию все сработает.

kostyanet 10.04.2015 16:36

Цитата:

Сообщение от misterdc
Скрипт masonry позволяет иметь структуру блоков как на сайте pinterest (вдруг кто не знает))

Там же каноничный многоколоночный блок. Зачем вообще тут нужен скрипт? Или я пинтереста не видел?

kostyanet 10.04.2015 16:39

Это вот для такого баяна нужен скрипт - http://erikjohanssonphoto.com/work/imagecats/personal/

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


Часовой пояс GMT +3, время: 05:37.