Версія 2.x


Основне використання

Завантажте файли 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 не встановлено явно.
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 не встановлено явно.
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 (зазвичай у головному розділі):

<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
gridzySkinFullOverlay
зміннаЗначення за замовчуваннямІнформація
--backgroundrgba(0, 0, 0, .7)дозволяє будь-яке фонове значення CSS
--colorrgb(255, 255, 255)дозволяє будь-яке значення кольору CSS
--text-shadownoneдозволяє будь-яке значення текстової тіні CSS
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
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
gridzySkinCard
зміннаЗначення за замовчуваннямІнформація
--backgroundrgba(0, 0, 0, 1)дозволяє будь-яке фонове значення CSS
--colorrgb(255, 255, 255)дозволяє будь-яке значення кольору CSS
--text-shadownoneдозволяє будь-яке значення текстової тіні CSS

Усі попередньо визначені скіни підтримують лише прості текстові підписи. Ви можете створювати власні та більш складні скіни. Будь ласка, подивіться на 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 . Самому Гридзі ці заняття не потрібні. Вони використовуються лише для стилізації, тому ви можете видалити або перейменувати їх, якщо хочете.

Крім того, ви знайдете клас CSS gridzyItem . Gridzy автоматично встановлює цей клас для всіх прямих дочірніх елементів основного контейнерного елемента. Отже, ви можете використовувати цей клас для стилізації елементів вашої галереї.

Пам’ятайте про важливі речі

  1. Вміст елемента має бути повністю адаптивним. Враховуйте, що розмір елемента обов'язково зміниться. Використовуйте значення у відсотках замість значень пікселів. І подивіться на опцію макета Gridzy autoFontSize , яка прив’язує розмір шрифту до розміру вікна елемента.
  2. Кожен предмет повинен мати чітко визначене співвідношення сторін. Співвідношення сторін елемента ніколи не зміниться, і воно потрібне для розрахунку сітки. Отже, якщо елемент не має автоматично чітко визначеного співвідношення сторін, попередньо визначте його вручну (наприклад, за допомогою css).

У деяких випадках може бути простіше стилізувати вміст елементів до ініціалізації Gridzy. Для цього просто тимчасово видаліть клас gridzy або файл JavaScript Gridzy.

Ось і все! Це все, що вам потрібно, щоб створити власну шкіру. Більшість попередньо визначених оболонок не використовують більше, ніж це.

Але їх може бути більше, якщо вам подобається...

Розширені скіни

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

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

Назва класуопис
gridzy
встановити вручну
Gridzy автоматично знаходить елементи з цим класом та ініціалізує їх.
gridzyAnimatedБуде встановлено автоматично, якщо параметр animate має true . Якщо цей клас встановлено вручну, параметр 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 абсолютно необхідне співвідношення сторін усіх зображень. Цей факт призводить до стрибків елементів, якщо одні зображення готові, а інші ні. Чим більше зображень, тим більше може дратувати цей ефект.

Щоб запобігти цьому, просто встановіть атрибути 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- або через 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();