Версия 2.х


Базовое использование

Загрузите файлы Gridzy на свой сервер и добавьте их на свой веб-сайт (обычно в раздел «head»):

<link rel="stylesheet" href="gridzy/gridzy.min.css" />
<script src="gridzy/gridzy.min.js"></script>

Добавьте HTML-код (в любое место в тексте):

<div class="gridzy">
  <img src="https://loremflickr.com/640/480?random=1" alt="a random image" />
  <img src="https://loremflickr.com/480/640?random=2" alt="another random image" />
  <img src="https://loremflickr.com/640/640?random=3" alt="yet another random image" />
  <img src="https://loremflickr.com/640/480?random=4" alt="a random image again" />
  <img src="https://loremflickr.com/640/480?random=5" alt="one last random image" />
</div>

Вот и все! Это полностью функциональный пример. Никакой дополнительной инициализации не требуется.

Конфигурация

Самый простой способ настроить Gridzy — просто использовать атрибуты HTML. Вам нужно только добавить префикс data-gridzy- к именам опций. Таким образом, чтобы задать опцию spaceBetween , просто добавьте атрибут data-gridzy-spaceBetween .

<div class="gridzy" data-gridzy-spaceBetween="20" data-gridzy-desiredHeight="400">
  <img src="https://loremflickr.com/640/480?random=1" alt="a random image" />
  <img src="https://loremflickr.com/480/640?random=2" alt="another random image" />
  <img src="https://loremflickr.com/640/640?random=3" alt="yet another random image" />
  <img src="https://loremflickr.com/640/480?random=4" alt="a random image again" />
  <img src="https://loremflickr.com/640/480?random=5" alt="one last random image" />
</div>

Основные параметры

Значение по умолчаниюОписание
animatetrueОпределяет, следует ли использовать анимацию при изменении сетки (например, при изменении размера окна браузера или при установке фильтра).
layoutjustifiedОпределяет используемый макет. Gridzy.js 2 поддерживает два разных макета justified и waterfall . Каждый из них имеет свои собственные дополнительные параметры, которые вы можете найти ниже этой таблицы.
filter*Определяет, какие изображения должны быть показаны. В качестве значения здесь может использоваться любой CSS-селектор. Обычно устанавливается автоматически через filterControls (см. следующую опцию).
Проверьте фильтры
filterControlsОпределяет, какие элементы формы могут использоваться для фильтрации изображений. Любой селектор CSS, который выбирает элементы формы HTML, может быть использован здесь в качестве значения.
Проверьте фильтры
autoConsiderScrollBarstrueЧтобы предсказать доступную ширину, если полосы прокрутки появляются или исчезают. Всегда рекомендуется оставлять его в true если только этот автоматизм не вызывает проблем.

Justified Варианты макета

Значение по умолчаниюОписание
autoFontSizefalseАвтоматически обновляет свойство font-size каждого блока на основе исходного размера блока. По умолчанию свойство font-size не задано явно.
desiredHeight190Определяет желаемую высоту рядов элементов. Фактическая высота будет вычисляться в зависимости от доступной ширины и элементов в ряду.
hideOnMissingImagetrueСкрывает поля с изображениями, которые не удалось загрузить.
spaceBetween4Определяет расстояние между элементами в пикселях.
lastRowAlign
начиная с версии 2.3.0
justifiedОпределяет поведение последней строки. Допустимые значения: left , center , right и justified .
singleRowAlign
начиная с версии 2.3.0
justifiedОпределяет поведение, если есть только одна строка. Допустимые значения: left , center , right и justified .
fillLastRow
начиная с версии 2.1.0
trueУДАЛЕНО с версии 2.4.0 (УСТАРЕЛО с версии 2.3.0 )
Располагает изображения так, чтобы последняя строка всегда была полностью заполнена. Если вы планируете добавлять изображения динамически, может быть хорошей идеей отключить это.
Не оказывает никакого влияния на отдельные строки (см. fillSingleRow ).
fillSingleRow
начиная с версии 2.1.0
trueУДАЛЕНО с версии 2.4.0 (УСТАРЕЛО с версии 2.3.0 )
Если есть только одна строка, он упорядочивает изображения так, что строка всегда полностью заполнена. Если может случиться так, что у вас есть только одно или два изображения в галерее, может быть хорошей идеей отключить это.

Waterfall Варианты макета

Значение по умолчаниюОписание
autoFontSizefalseАвтоматически обновляет свойство font-size каждого блока на основе исходного размера блока. По умолчанию свойство font-size не задано явно.
desiredWidth250Определяет желаемую ширину столбцов. Фактическая ширина будет вычислена в зависимости от доступной ширины и количества столбцов.
hideOnMissingImagetrueСкрывает поля с изображениями, которые не удалось загрузить.
horizontalOrderfalseОпределяет, что элементы размещаются строго по одному элементу в каждом столбце слева направо, затем снова начинается в самом левом столбце независимо от того, в каком столбце больше места. По умолчанию элементы всегда будут размещаться в столбце с наименьшей высотой.
spaceBetween4Определяет расстояние между элементами в пикселях.
singleRowAlign
since version 2.7.0
justifiedDefines the behavior when not all columns can be filled due to too few images. Allowed values are left, center, right and justified.

Дополнительные расширенные параметры

Для получения более расширенных возможностей ознакомьтесь с API .

Семантический HTML

Простейшая HTML-структура Gridzy выглядит следующим образом:

<div class="gridzy">
  <img src="https://loremflickr.com/640/480?random=1" alt="a random image" />
  <img src="https://loremflickr.com/480/640?random=2" alt="another random image" />
  <img src="https://loremflickr.com/640/640?random=3" alt="yet another random image" />
  <img src="https://loremflickr.com/640/480?random=4" alt="a random image again" />
  <img src="https://loremflickr.com/640/480?random=5" alt="one last random image" />
</div>

Однако Gridzy очень гибок, и вы можете использовать практически любую другую структуру HTML. Нужно учесть лишь несколько моментов:

  • Каждый дочерний элемент контейнера представляет один элемент в сетке.
  • Как элемент-контейнер, так и его дочерние элементы могут быть любого типа тегов, например ul и li (просто учтите необходимость сброса настроек браузера по умолчанию).
  • Если элемент img сам по себе не является прямым дочерним элементом, ему необходим класс gridzyImage .

Итак, это также рабочая HTML-структура:

<ul class="gridzy">
  <li>
    <span>
      <img class="gridzyImage" src="https://loremflickr.com/640/480?random=1" alt="a random image" />
    </span>
  </li>
  <li>
    <span>
      <img class="gridzyImage" src="https://loremflickr.com/480/640?random=2" alt="another random image" />
    </span>
  </li>
  <li>
    <span>
      <img class="gridzyImage" src="https://loremflickr.com/640/640?random=3" alt="yet another random image" />
    </span>
  </li>
  <li>
    <span>
      <img class="gridzyImage" src="https://loremflickr.com/640/480?random=4" alt="a random image again" />
    </span>
  </li>
  <li>
    <span>
      <img class="gridzyImage" src="https://loremflickr.com/640/480?random=5" alt="one last random image" />
    </span>
  </li>
</ul>

Особенно, если вы хотите добавить подписи, вам нужна расширенная структура HTML. Чтобы узнать больше об этом, взгляните на Подписи и скины .

Подписи и скины

Если вы хотите добавить подписи к своей галерее, вам нужно определить внешний вид. Поэтому доступны некоторые предопределенные скины. Каждый скин состоит из файла CSS. Вам нужно добавить этот файл в дополнение к основным файлам Gridzy (обычно в разделе head):

<link rel="stylesheet" href="gridzy/skins/gridzySkinClassic/style.min.css" />

Кроме того, вам понадобится расширенная структура HTML:

<div class="gridzy gridzySkinClassic">
  <figure>
    <img class="gridzyImage" src="https://loremflickr.com/640/480?random=1" alt="a random image" />
    <figcaption class="gridzyCaption">a caption text</figcaption>
  </figure>
  <figure>
    <img class="gridzyImage" src="https://loremflickr.com/480/640?random=2" alt="another random image" />
    <figcaption class="gridzyCaption">another caption text</figcaption>
  </figure>
  <figure>
    <img class="gridzyImage" src="https://loremflickr.com/640/640?random=3" alt="yet another random image" />
    <figcaption class="gridzyCaption">yet another caption text</figcaption>
  </figure>
  <figure>
    <img class="gridzyImage" src="https://loremflickr.com/640/480?random=4" alt="a random image again" />
    <figcaption class="gridzyCaption">a caption text again</figcaption>
  </figure>
  <figure>
    <img class="gridzyImage" src="https://loremflickr.com/640/480?random=5" alt="one last random image" />
    <figcaption class="gridzyCaption">one last caption text</figcaption>
  </figure>
</div>

Если вас интересует структура HTML, взгляните на Semantic HTML .

Для подписи вы можете использовать любой тип тега, просто убедитесь, что он имеет класс gridzyCaption . Элементу img нужен класс gridzyImage .

В примере выше показан скин gridzySkinClassic . Чтобы использовать другой, просто замените имя скина на одно из этих:

Включенные скины

Доступные классы
gridzySkinBlank
хорошая отправная точка для создания собственного скина
предварительный просмотр в реальном времени
gridzySkinBlank
gridzySkinClassic
предварительный просмотр в реальном времени
gridzySkinClassic
gridzySkinClassicLight(УСТАРЕЛО с версии 2.6.0)
gridzySkinFullOverlay
предварительный просмотр в реальном времени
gridzySkinFullOverlay
gridzySkinFullOverlayLight(УСТАРЕЛО с версии 2.6.0)
gridzySkinLift
предварительный просмотр в реальном времени
gridzySkinLift
gridzySkinLiftLight(УСТАРЕЛО с версии 2.6.0)
gridzySkinMagnifier
Функция масштабирования не включена.
предварительный просмотр в реальном времени
gridzySkinMagnifier
gridzySkinMagnifierLight(УСТАРЕЛО с версии 2.6.0)

Для всех вышеперечисленных скинов требуется только файл CSS, но есть дополнительные скины, которым также требуется файл JavaScript:

<link rel="stylesheet" href="gridzy/skins/gridzySkinBlur/style.min.css" />
<script src="gridzy/skins/gridzySkinBlur/script.min.js"></script>
Доступные классы
gridzySkinBlur
не работает в IE
предварительный просмотр в реальном времени
gridzySkinBlur
gridzySkinBlurLight(УСТАРЕЛО с версии 2.6.0)
gridzySkinCard
предварительный просмотр в реальном времени
gridzySkinCard
gridzySkinCardLight(УСТАРЕЛО с версии 2.6.0)

Параметры скина

Начиная с версии 2.6.0 есть опции для настройки встроенных скинов. В зависимости от конкретного скина вы можете задать цвет фона, цвет текста и тень текста. Вам просто нужно использовать пользовательские свойства CSS, как вы можете видеть здесь:

<div class="gridzy gridzySkinClassic" style="--background: rgba(0, 80, 117, .8); --color: rgb(238, 238, 238); ">
  <figure>
    <img class="gridzyImage" src="https://loremflickr.com/640/480?random=1" alt="a random image" />
    <figcaption class="gridzyCaption">a caption text</figcaption>
  </figure>
  <figure>
    <img class="gridzyImage" src="https://loremflickr.com/480/640?random=2" alt="another random image" />
    <figcaption class="gridzyCaption">another caption text</figcaption>
  </figure>

  ...

</div>

Ознакомьтесь с поддерживаемыми переменными и значениями по умолчанию для каждого скина здесь:

gridzySkinClassic
ПеременнаяЗначение по умолчаниюИнформация
--backgroundrgba(0, 0, 0, .7)допускает любое значение фона CSS
--colorrgb(255, 255, 255)допускает любое значение цвета CSS
--text-shadownoneдопускает любое значение CSS text-shadow
gridzySkinFullOverlay
ПеременнаяЗначение по умолчаниюИнформация
--backgroundrgba(0, 0, 0, .7)допускает любое значение фона CSS
--colorrgb(255, 255, 255)допускает любое значение цвета CSS
--text-shadownoneдопускает любое значение CSS text-shadow
gridzySkinLift
ПеременнаяЗначение по умолчаниюИнформация
--backgroundrgba(0, 0, 0, .7)допускает любое значение фона CSS
--colorrgb(255, 255, 255)допускает любое значение цвета CSS
--text-shadow0 0 10px rgb(0, 0, 0), 0 0 20px rgb(0, 0, 0), 0 0 30px rgb(0, 0, 0)допускает любое значение CSS text-shadow
gridzySkinMagnifier
ПеременнаяЗначение по умолчаниюИнформация
--backgroundrgba(0, 0, 0, .7)допускает любое значение фона CSS
--colorrgb(255, 255, 255)допускает любое значение цвета CSS

Этот скин не поддерживает --text-shadow

gridzySkinBlur
ПеременнаяЗначение по умолчаниюИнформация
--backgroundrgba(0, 0, 0, .7)допускает любое значение фона CSS
--colorrgb(255, 255, 255)допускает любое значение цвета CSS
--text-shadow0 0 10px rgb(0, 0, 0)допускает любое значение CSS text-shadow
gridzySkinCard
ПеременнаяЗначение по умолчаниюИнформация
--backgroundrgba(0, 0, 0, 1)допускает любое значение фона CSS
--colorrgb(255, 255, 255)допускает любое значение цвета CSS
--text-shadownoneдопускает любое значение CSS text-shadow

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

Стиль Гридзи

Если ни один из готовых вариантов оформления не соответствует вашим требованиям, вы можете создать свой собственный.

Самый простой способ — сначала скопировать существующий скин и адаптировать его под свои нужды. Предопределенный скин gridzySkinBlank обычно обеспечивает хорошую основу, а также хорошую документацию в файле CSS:

/** SKIN Blank **/

/* all gallery items (direct children of the main container element) */
.gridzySkinBlank > .gridzyItem {
  overflow: hidden;
}

/* all gallery images (predefined in Gridzy's main CSS file, but can be overridden) */
.gridzySkinBlank .gridzyImage {
}

/* all gallery captions (just create your very own style) */
.gridzySkinBlank .gridzyCaption {
  margin: 0;
  padding: .5em;
  opacity: 0;
  display: flex;
  justify-content: center;
  align-items: center;
  text-align: center;
  position: absolute;
  z-index: 1;
  top: 0;
  left: 0;
  width: 100%;
  height: 100%;
  box-sizing: border-box;
  transition: opacity .5s;
  overflow: auto;
  background: rgba(0, 0, 0, .7);
  color: rgb(255, 255, 255);
}

.gridzySkinBlank > .gridzyItem:hover .gridzyCaption {
  opacity: 1;
}

В файле CSS вы найдете классы gridzySkinBlank , gridzyImage и gridzyCaption . Сам Gridzy не нуждается в этих классах. Они используются только для стилизации, поэтому вы можете удалить или переименовать их, если захотите.

Кроме того, вы найдете класс CSS gridzyItem . Gridzy автоматически устанавливает этот класс для всех прямых потомков основного элемента-контейнера. Таким образом, вы можете использовать этот класс для стилизации элементов вашей галереи.

Помните о важных вещах

  1. Содержимое элемента должно быть полностью адаптивным. Учтите, что размер элемента определенно изменится. Используйте процентные значения вместо пиксельных. И взгляните на опцию макета Gridzy autoFontSize , которая привязывает размер шрифта к размеру поля элемента.
  2. Каждый элемент должен иметь четко определенное соотношение сторон. Соотношение сторон элемента никогда не изменится и необходимо для расчета сетки. Поэтому, если элемент автоматически не имеет четко определенного соотношения сторон, задайте его вручную (например, через css).

В некоторых случаях может быть проще стилизовать содержимое элементов до инициализации Gridzy. Для этого просто временно удалите класс gridzy или файл Gridzy javascript.

Вот и все! Это все, что вам нужно для создания собственного скина. Большинство предопределенных скинов не используют больше этого.

Но их может быть больше, если хотите…

Расширенные скины

Gridzy использует больше классов CSS, чем только gridzyItem . Большинство из них будут установлены автоматически, и вы также можете использовать их для стилизации.

Основные классы контейнеров

Имя классаОписание
gridzy
установить вручную
Gridzy автоматически находит элементы с этим классом и инициализирует их.
gridzyAnimatedБудет установлено автоматически, если option animate имеет true . Если этот класс установлен вручную, option animate также автоматически получит true (за исключением случаев, когда он явно установлен в false ).

Классы предметов

Имя классаОписание
gridzyItemБудет установлено, как только элемент начнет процесс инициализации. Никогда не будет удалено.
gridzyItemInitializingБудет установлено, как только элемент начнет процесс инициализации. Будет заменено на gridzyItemReady , как только элемент будет полностью инициализирован. Означает не то, что изображения полностью загружены (см. gridzyItemLoading ), а то, что элемент готов стать видимым.
gridzyItemReadyЗаменит gridzyItemInitializing , как только элемент будет полностью инициализирован. Никогда не будет удален. Означает не то, что изображения полностью загружены (см. gridzyItemComplete ), а то, что элемент готов стать видимым.
gridzyItemLoadingБудет установлено, как только элемент начнет процесс инициализации. Будет заменено на gridzyItemComplete , как только содержащиеся изображения (обычно только одно) будут полностью загружены.
gridzyItemCompleteЗаменит gridzyItemLoading , как только содержащиеся в нем изображения (обычно только одно) будут полностью загружены. Никогда не будет удален.
gridzyItemInitialToVisibleБудет установлено, как только элемент начнет появляться в первый раз. Будет удалено, как только элемент станет полностью видимым.
gridzyItemVisibleБудет установлено, как только элемент станет полностью видимым. Будет удалено, как только элемент начнет исчезать.
gridzyItemVisibleToHiddenБудет установлено, как только элемент начнет исчезать. Будет удалено, как только элемент будет полностью скрыт.
gridzyItemHiddenБудет установлено, как только элемент будет полностью скрыт. Будет удалено, как только элемент начнет появляться.
gridzyItemHiddenToVisibleБудет установлено, как только элемент начнет появляться (за исключением появления в первый раз – см. класс gridzyItemInitialToVisible ). Будет удалено, как только элемент станет полностью видимым.
gridzyItemVisibleToVisibleБудет установлено, как только что-то в сетке изменилось, но сам элемент был и остается видимым. Будет удалено, как только анимация изменения будет завершена.

По умолчанию индикатор процесса и анимация появления и исчезновения изображений предопределены основным CSS-файлом Gridzy.

С этими вышеупомянутыми классами CSS вы можете стилизовать свой собственный индикатор процесса и анимацию. Осмелитесь заглянуть в основной файл CSS Gridzy, чтобы понять, что вам придется переопределить. Не бойтесь, там все хорошо документировано.

Оптимизировать загрузку

Если вы используете много изображений, было бы неплохо помочь Gridzy быстрее построить сетку.

Предотвратить прыгающие изображения

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

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

<div class="gridzy">
  <img src="https://loremflickr.com/640/480?random=1" width="640" height="480" alt="a random image" />
  <img src="https://loremflickr.com/480/640?random=2" width="480" height="640" alt="another random image" />
  <img src="https://loremflickr.com/640/640?random=3" width="640" height="640" alt="yet another random image" />
  <img src="https://loremflickr.com/640/480?random=4" width="640" height="480" alt="a random image again" />
  <img src="https://loremflickr.com/640/480?random=5" width="640" height="480" alt="one last random image" />
</div>

После этого Gridzy может сразу рассчитать сетку, не зная фактических размеров изображений.

Ленивая загрузка

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

  1. Вставьте атрибуты width и height как описано выше (убедитесь, что вы используете правильные значения)
  2. Замените все атрибуты src на data-gridzylazysrc как показано ниже (если у вас также есть атрибуты srcset , замените их на data-gridzylazysrcset ).
<div class="gridzy">
  <img data-gridzylazysrc="https://loremflickr.com/640/480?random=1" width="640" height="480" alt="a random image" />
  <img data-gridzylazysrc="https://loremflickr.com/480/640?random=2" width="480" height="640" alt="another random image" />
  <img data-gridzylazysrc="https://loremflickr.com/640/640?random=3" width="640" height="640" alt="yet another random image" />
  <img data-gridzylazysrc="https://loremflickr.com/640/480?random=4" width="640" height="480" alt="a random image again" />
  <img data-gridzylazysrc="https://loremflickr.com/640/480?random=5" width="640" height="480" alt="one last random image" />
</div>

После этих шагов изображения будут загружаться, как только они окажутся вблизи или внутри области просмотра.

Индикатор процесса

Индикатор процесса — это маленькая анимированная иконка, которая появляется во время загрузки изображения. Если вы используете подписи и скины , индикатор процесса будет отображаться автоматически. В противном случае вам понадобятся некоторые настройки:

  1. Поместите каждый элемент img в элемент div .
    (или в любой другой элемент – см. семантический HTML для получения дополнительной информации)
  2. Добавьте класс gridzyImage к каждому элементу img
<div class="gridzy">
  <div><img src="https://loremflickr.com/640/480?random=1" class="gridzyImage" alt="a random image" /></div>
  <div><img src="https://loremflickr.com/480/640?random=2" class="gridzyImage" alt="another random image" /></div>
  <div><img src="https://loremflickr.com/640/640?random=3" class="gridzyImage" alt="yet another random image" /></div>
  <div><img src="https://loremflickr.com/640/480?random=4" class="gridzyImage" alt="a random image again" /></div>
  <div><img src="https://loremflickr.com/640/480?random=5" class="gridzyImage" alt="one last random image" /></div>
</div>

После этого вы должны увидеть индикаторы процесса, если загрузка изображений занимает много времени.

Фильтры

Фильтры в Gridzy довольно простые, но мощные. Какой бы фильтр вам ни нужен, скорее всего, он реализуем. Все, что вам нужно, это немного CSS и несколько элементов HTML-формы …

Вот функциональный пример:

<div id="myFilterControls">
  <button value="*">All</button>
  <button value=".animals">Animals</button>
  <button value=".architecture">Architecture</button>
  <button value=".people">People</button>
</div>

<div class="gridzy" data-gridzy-filterControls="#myFilterControls button">
  <img class="animals" src="https://loremflickr.com/640/480/animals?random=1" alt="a random animal image" />
  <img class="architecture" src="https://loremflickr.com/640/480/arch?random=1" alt="a random architecture image" />
  <img class="people" src="https://loremflickr.com/640/480/people?random=1" alt="a random people image" />
  <img class="animals" src="https://loremflickr.com/640/480/animals?random=2" alt="another random animal image" />
  <img class="architecture" src="https://loremflickr.com/640/480/arch?random=2" alt="another random architecture image" />
  <img class="people" src="https://loremflickr.com/640/480/people?random=2" alt="another random people image" />
  <img class="animals" src="https://loremflickr.com/640/480/animals?random=3" alt="yet another random animal image" />
</div>

Давайте построим это шаг за шагом

1. Сначала нам нужна обычная HTML-структура Gridzy и заданы имена классов для всех элементов галереи, чтобы мы могли их впоследствии фильтровать.

<div class="gridzy">
  <img class="animals" src="https://loremflickr.com/640/480/animals?random=1" alt="a random animal image" />
  <img class="architecture" src="https://loremflickr.com/640/480/arch?random=1" alt="a random architecture image" />
  <img class="people" src="https://loremflickr.com/640/480/people?random=1" alt="a random people image" />
  <img class="animals" src="https://loremflickr.com/640/480/animals?random=2" alt="another random animal image" />
  <img class="architecture" src="https://loremflickr.com/640/480/arch?random=2" alt="another random architecture image" />
  <img class="people" src="https://loremflickr.com/640/480/people?random=2" alt="another random people image" />
  <img class="animals" src="https://loremflickr.com/640/480/animals?random=3" alt="yet another random animal image" />
</div>

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

2. Затем мы добавляем несколько кнопок, с помощью которых мы можем менять фильтры.

<button value="*">All</button>
<button value=".animals">Animals</button>
<button value=".architecture">Architecture</button>
<button value=".people">People</button>

<div class="gridzy">
  <img class="animals" src="https://loremflickr.com/640/480/animals?random=1" alt="a random animal image" />
  <img class="architecture" src="https://loremflickr.com/640/480/arch?random=1" alt="a random architecture image" />
  <img class="people" src="https://loremflickr.com/640/480/people?random=1" alt="a random people image" />
  <img class="animals" src="https://loremflickr.com/640/480/animals?random=2" alt="another random animal image" />
  <img class="architecture" src="https://loremflickr.com/640/480/arch?random=2" alt="another random architecture image" />
  <img class="people" src="https://loremflickr.com/640/480/people?random=2" alt="another random people image" />
  <img class="animals" src="https://loremflickr.com/640/480/animals?random=3" alt="yet another random animal image" />
</div>

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

Как видите, значения кнопок — это обычные селекторы CSS. Как только мы закончим, нажатие на такую кнопку отобразит изображения, соответствующие этому селектору CSS. Технически это просто устанавливает опцию filter на это значение.

Вы также можете использовать гораздо более сложные селекторы. Например :not(.animals) тоже подойдет, равно как и .animals.people и .animals, .people .

3. Наконец, мы инкапсулируем кнопки в контейнер div и привязываем их к галерее Gridzy, установив параметр filterControls :

<div id="myFilterControls">
  <button value="*">All</button>
  <button value=".animals">Animals</button>
  <button value=".architecture">Architecture</button>
  <button value=".people">People</button>
</div>

<div class="gridzy" data-gridzy-filterControls="#myFilterControls button">
  <img class="animals" src="https://loremflickr.com/640/480/animals?random=1" alt="a random animal image" />
  <img class="architecture" src="https://loremflickr.com/640/480/arch?random=1" alt="a random architecture image" />
  <img class="people" src="https://loremflickr.com/640/480/people?random=1" alt="a random people image" />
  <img class="animals" src="https://loremflickr.com/640/480/animals?random=2" alt="another random animal image" />
  <img class="architecture" src="https://loremflickr.com/640/480/arch?random=2" alt="another random architecture image" />
  <img class="people" src="https://loremflickr.com/640/480/people?random=2" alt="another random people image" />
  <img class="animals" src="https://loremflickr.com/640/480/animals?random=3" alt="yet another random animal image" />
</div>

Как вы видите, мы также используем селектор CSS для опции filterControls . Контейнер div с атрибутом id служит только для того, чтобы сделать кнопки более удобными для выбора с помощью этого селектора CSS.

Вот и все!

Если вы предпочитаете решение на основе JavaScript, ознакомьтесь с API .

API

Хотя у Gridzy есть свой API, большинство вещей можно сделать и без него, просто манипулируя DOM. Gridzy заметит это и подстроит сетку. Но есть и очень мощный API…

Манипулирование DOM

Для всех манипуляций с объектной моделью документа (DOM) нам в первую очередь нужен элемент-контейнер:

// get the container element
var gridzyElement = document.querySelector('.gridzy');

Добавить изображения

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

// create a new img element
var newImage = document.createElement('img');

// add src attribute (!! before you add it to the container element !!)
newImage.src = 'https://loremflickr.com/640/480';

// add it as last element to the container element
gridzyElement.appendChild(newImage);

// or as first element (or anywhere in between)
gridzyElement.insertBefore(newImage, gridzyElement.firstChild);

Удалить изображения

// remove the first image
gridzyElement.removeChild(gridzyElement.firstElementChild);

Изменить параметры

// change the spaceBetween option to a specific value
gridzyElement.setAttribute('data-gridzy-spaceBetween', '10');

// change the layout option to a specific value
gridzyElement.setAttribute('data-gridzy-layout', 'waterfall');

// reset the spaceBetween option to its default value
gridzyElement.removeAttribute('data-gridzy-spaceBetween');

Подробнее о работе с DOM вы можете узнать в веб-документах MDN . Также доступно Введение в DOM .

Запатентованный API

Чтобы использовать API, нам сначала нужен экземпляр Gridzy, который привязан к элементу контейнера Gridzy:

// get the Gridzy instance
var gridzyInstance = document.querySelector('.gridzy').gridzy;

Получить вариант

// get the value of a single option
var currentLayout = gridzyInstance.getOption('layout');

Получить все варианты

// get all option values as an object
var currentOptions = gridzyInstance.getOptions();

Установить параметры

// set specific option values
gridzyInstance.setOptions({
  spaceBetween: 10,
  layout: 'waterfall'
});

// or reset options to their default values
gridzyInstance.setOptions({
  spaceBetween: null,
  layout: null
});

Применить фильтр

Применение фильтра — это просто установка filter параметров, которым может быть любой допустимый селектор CSS:

// set the filter to match items with class "animals"
gridzyInstance.setOptions({
  filter: '.animals'
});

// reset the filter to match all items again
gridzyInstance.setOptions({
  filter: '*'
});

// set the filter to match items without class "animals"
gridzyInstance.setOptions({
  filter: ':not(.animals)'
});

// set the filter to match items with class "animals" or "people"
gridzyInstance.setOptions({
  filter: '.animals, .people'
});

// set the filter to match items that have both classes, "animals" and "people"
gridzyInstance.setOptions({
  filter: '.animals.people'
});

Добавить функции обратного вызова

УСТАРЕВШЕЕ с версии 2.4.0
Вместо этого используйте современные и более гибкие События . Подробности см. в следующем разделе.

Gridzy.js 2 поддерживает некоторые опции для функций обратного вызова. Их можно задать только через фирменный API, но так же, как и другие опции:

// same as set other options
gridzyInstance.setOptions({
  onOptionsChanged: function() {
    // will be executed each time the options have changed.
  },
  onBeforeOptionsChanged: function() {
    // will be executed, before new options take effect.
  }
});
Описание
onBeforeOptionsChangedФункция обратного вызова, которая вызывается непосредственно перед настройкой параметров.
onOptionsChangedФункция обратного вызова, которая вызывается сразу после установки параметров.
onBeforeRenderФункция обратного вызова, которая вызывается непосредственно перед рендерингом.
onRenderФункция обратного вызова, которая вызывается сразу после рендеринга.

Используйте события

начиная с версии 2.4.0

Вы можете использовать события Gridzy точно так же, как и обычные события JavaScript:

document.addEventListener('gridzyOptionsChanged', function(event) {
    // will be executed each time the options have changed.
});

document.addEventListener('gridzyBeforeOptionsChanged', function(event) {
    // will be executed, before new options take effect.
});

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

События, запускаемые в элементе контейнера Gridzy:

Описание
gridzyBeforeInitСрабатывает перед инициализацией галереи.
gridzyInitСрабатывает после инициализации галереи.
gridzyBeforeOptionsChangedСрабатывает перед настройкой параметров.
gridzyOptionsChangedСрабатывает после настройки параметров.
gridzyBeforeRenderСрабатывает перед рендерингом.
gridzyRenderСрабатывает после рендеринга.
Если вы пропустили какие-либо события, пожалуйста, отправьте запрос в службу поддержки .

event.target предоставляет элемент-контейнер Gridzy.
event.detail.instance предоставляет экземпляр Gridzy.

События, вызываемые элементами элемента:

Описание
gridzyItemBeforeInitСрабатывает перед инициализацией элемента.
gridzyItemInitСрабатывает после инициализации элемента.
gridzyItemLoadingСрабатывает, когда элемент начинает загружаться.
gridzyItemReadyСрабатывает, когда элемент готов к расчету сетки. Поэтому соотношение сторон известно, но изображение может все еще загружаться.
gridzyItemCompleteСрабатывает, когда изображение элемента полностью загружено.
Если вы пропустили какие-либо события, пожалуйста, отправьте запрос в службу поддержки .

event.target предоставляет соответствующий элемент item.
event.detail.instance предоставляет экземпляр Gridzy.

API – Глобальный

Есть некоторые функции, которые независимы от экземпляров Gridzy. Поэтому нам не нужно получать экземпляр заранее.

Получить вариант по умолчанию

// get the default value of a single option
var defaultLayout = Gridzy.getDefaultOption('layout');

Получить все параметры по умолчанию

// get all default option values as an object, including the default layout options of the default layout
var defaultOptions = Gridzy.getDefaultOptions();

// or get all default option values, including the default layout options of a specific layout
var defaultOptions = Gridzy.getDefaultOptions('waterfall');

Установить параметры по умолчанию

Это не устанавливает параметры всех уже инициализированных экземпляров Gridzy, но определяет основу для новых экземпляров. Однако, если параметр существующего экземпляра будет сброшен через значение null , он будет использовать новое значение по умолчанию.

// set default option values
Gridzy.setDefaultOptions({
  spaceBetween: 10,
  layout: 'waterfall'
});

Вы можете использовать это для глобальной установки опций, если вызовете ее до готовности DOM. Таким образом, вам больше не нужно будет устанавливать опции как атрибуты.

Автоматизмы

Пока все автоматизмы Gridzy.js 2 активны, нет необходимости в нижеприведенных методах. Но автоматизмы можно отключить, чтобы использовать Gridzy более традиционным способом:

// disable automatic initializations
Gridzy.setDefaultOptions({
  autoInitOnDomReady: false,
  autoInitOnDomMutation: false
});

// or switch off all mutation observers
Gridzy.setDefaultOptions({
  autoInitOnDomMutation: false,
  autoSyncChildListMutation: false,
  autoSyncAttributesMutation: false,
  autoSyncChildClassMutation: false,
  autoSyncImageMutation: false
});

Некоторые из этих параметров не могут быть установлены через data-gridzy- attributes или через setOptions() по логическим причинам:

Значение по умолчаниюОписание
autoInitOnDomReadytrueОбнаруживает элементы с классом gridzy при загрузке страницы и инициализирует их.

Устанавливается через Gridzy.setDefaultOptions()
autoInitOnDomMutation
MutationObserver
trueОбнаруживает новые элементы с классом gridzy как только они появляются в DOM, и инициализирует их. (например, при использовании переходов страниц)

Устанавливается через Gridzy.setDefaultOptions()
autoSyncChildListMutation
MutationObserver
trueОпределяет, добавлены или удалены дочерние элементы (изображения), и автоматически обновляет сетку.

Устанавливается через data-grizy- , new Gridzy() , setOptions() , Gridzy.setDefaultOptions()
useOptionAttributestrueОпределяет, используются ли атрибуты data-gridzy- в целом или нет. Если это false параметры можно задать только через собственный API.

Устанавливается через new Gridzy() , setOptions() , Gridzy.setDefaultOptions()
autoSyncAttributesMutation
MutationObserver
trueОбнаруживает изменения атрибутов data-gridzy- и автоматически обновляет сетку. Также обнаруживает, добавлен или удален класс gridzyAnimated и происходят ли изменения атрибутов style . Если useOptionAttributes имеет значение false , он обнаруживает только изменения атрибутов style .

Устанавливается через data-grizy- , new Gridzy() , setOptions() , Gridzy.setDefaultOptions()
autoSyncChildClassMutation
MutationObserver
trueОбнаруживает изменения атрибутов class всех дочерних элементов (изображений). Актуально для фильтров.

Устанавливается через data-grizy- , new Gridzy() , setOptions() , Gridzy.setDefaultOptions()
autoSyncImageMutation
MutationObserver

начиная с версии 2.5.0
trueОбнаруживает изменения атрибутов src всех изображений. Актуально при использовании с React или аналогичными библиотеками.

Устанавливается через data-grizy- , new Gridzy() , setOptions() , Gridzy.setDefaultOptions()
autoRenderOnResize
ResizeObserver

начиная с версии 2.6.0
trueОбнаруживает изменения ширины элемента. Актуально для адаптивного дизайна. (До версии 2.6.0 использовался прослушиватель событий изменения размера окна)

Устанавливается через data-grizy- , new Gridzy() , setOptions() , Gridzy.setDefaultOptions()

Инициализировать вручную

// initialize a new Gridzy instance
var gridzyInstance = new Gridzy(document.querySelector('.gridzy'), {
  spaceBetween: 10,
  layout: 'waterfall'
});

Уничтожить экземпляр

Грубо говоря, это противоположность инициализации Gridzy.

gridzyInstance.destroy();
gridzyInstance = null;

Синхронизировать список детей вручную

// after child elements (images) are added to or removed from the DOM.
gridzyInstance.syncChildList();

Синхронизация одного дочернего элемента вручную

Обычно не требуется, за исключением очень редких случаев.

// after child elements (images) are added to the DOM and only one of them should be synced to Gridzy.
gridzyInstance.syncChild(childElement);

Синхронизировать атрибуты вручную

Обратите внимание, что для этого параметр useOptionAttributes должен иметь true .

// after data-gridzy- attributes have changed
gridzyInstance.syncAttributes();

Принудительная обработка

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

gridzyInstance.render();