Версия 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Автоматично актуализира свойството размер на шрифта на всяко поле въз основа на оригиналния размер на полето. По подразбиране свойството размер на шрифта не е зададено изрично.
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Автоматично актуализира свойството размер на шрифта на всяко поле въз основа на оригиналния размер на полето. По подразбиране свойството размер на шрифта не е зададено изрично.
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 стойност на текстова сянка
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 . Самият Gridzy не се нуждае от тези класове. Те се използват само за оформяне и можете да ги премахнете или преименувате, ако желаете.

Освен това ще намерите 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 да изгради мрежата по-бързо.

Предотвратяване на прескачащи изображения

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

За всички манипулации на Document Object Model (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();