Библиотека Isotope предоставляет набор параметров, управляющих поведением сетки элементов: компоновкой, фильтрацией, сортировкой, анимацией и обработкой размеров контейнера. При создании экземпляра Isotope можно передать объект настроек. Если параметр не указан, используется значение по умолчанию.
Понимание этих параметров позволяет контролировать:
Инициализация библиотеки выполняется следующим образом:
var iso = new Isotope('.grid', {
// параметры конфигурации
});
Каждое свойство объекта определяет конкретный аспект работы движка компоновки.
layoutMode определяет алгоритм размещения элементов внутри контейнера.
Значение по умолчанию:
layoutMode: 'masonry'
Алгоритм masonry размещает элементы по принципу «каменной кладки», заполняя вертикальные колонки без фиксированных строк.
Другие доступные режимы:
| Режим | Описание |
|---|---|
masonry |
каскадная сетка |
fitRows |
равномерные строки |
vertical |
вертикальный список |
packery |
более сложная компоновка с плотной упаковкой |
cellsByRow |
сетка по строкам |
cellsByColumn |
сетка по колонкам |
Пример изменения режима:
var iso = new Isotope('.grid', {
layoutMode: 'fitRows'
});
itemSelector определяет CSS-селектор элементов, которыми управляет Isotope.
По умолчанию:
itemSelector: '.grid-item'
Все элементы внутри контейнера, соответствующие селектору, будут участвовать в фильтрации, сортировке и компоновке.
Пример структуры HTML:
<div class="grid">
<div class="grid-item"></div>
<div class="grid-item"></div>
<div class="grid-item"></div>
</div>
Если используется другой класс:
var iso = new Isotope('.grid', {
itemSelector: '.item'
});
Параметр percentPosition определяет, будут ли координаты элементов рассчитываться в процентах.
Значение по умолчанию:
percentPosition: false
Если установить:
percentPosition: true
координаты элементов будут задаваться в процентах, что удобно для адаптивных макетов.
Часто применяется вместе с Masonry:
var iso = new Isotope('.grid', {
itemSelector: '.grid-item',
percentPosition: true,
masonry: {
columnWidth: '.grid-sizer'
}
});
Параметр transitionDuration задаёт длительность анимаций перемещения элементов.
Значение по умолчанию:
transitionDuration: '0.4s'
При сортировке, фильтрации или перестроении сетки элементы плавно перемещаются.
Изменение длительности:
transitionDuration: '0.8s'
Полное отключение анимации:
transitionDuration: 0
hiddenStyle определяет CSS-стили для элементов, которые скрываются при фильтрации.
По умолчанию используется:
hiddenStyle: {
opacity: 0,
transform: 'scale(0.001)'
}
Элемент становится прозрачным и практически исчезает благодаря масштабированию.
Изменение поведения скрытия:
hiddenStyle: {
opacity: 0,
transform: 'translateY(100px)'
}
visibleStyle задаёт стили для отображаемых элементов.
Значение по умолчанию:
visibleStyle: {
opacity: 1,
transform: 'scale(1)'
}
При появлении элементы возвращаются к нормальному размеру и полной непрозрачности.
Пример альтернативной анимации:
visibleStyle: {
opacity: 1,
transform: 'translateY(0)'
}
Параметр stagger добавляет задержку между анимациями элементов.
По умолчанию:
stagger: 0
Если задать:
stagger: 30
каждый следующий элемент будет анимироваться с задержкой 30 миллисекунд, создавая эффект каскадного появления.
Можно использовать строку времени:
stagger: '0.05s'
Параметр resize определяет, будет ли Isotope реагировать на изменение размеров окна браузера.
Значение по умолчанию:
resize: true
При изменении ширины окна сетка автоматически пересчитывается.
Отключение автоматического пересчёта:
resize: false
В таком случае компоновку придётся обновлять вручную:
iso.layout();
Параметр initLayout определяет, выполняется ли начальная компоновка при создании экземпляра.
По умолчанию:
initLayout: true
Если установить:
initLayout: false
компоновка будет выполнена только после вызова метода:
iso.layout();
Это полезно при динамической загрузке данных.
containerStyle задаёт CSS-стили, применяемые к контейнеру сетки.
По умолчанию:
containerStyle: {
position: 'relative'
}
Такой стиль необходим для правильного позиционирования элементов.
При необходимости можно изменить:
containerStyle: {
position: 'relative',
overflow: 'hidden'
}
Параметр filter задаёт начальный фильтр элементов.
По умолчанию:
filter: '*'
Звёздочка означает отображение всех элементов.
Пример начального фильтра:
filter: '.featured'
Будут отображаться только элементы с классом
featured.
Параметр sortBy определяет критерий сортировки элементов.
По умолчанию:
sortBy: 'original-order'
Элементы остаются в том порядке, в котором они расположены в DOM.
Пример сортировки:
sortBy: 'name'
Для работы сортировки необходимо определить функцию
getSortData.
Параметр sortAscending определяет направление сортировки.
По умолчанию:
sortAscending: true
Значения:
| Значение | Результат |
|---|---|
true |
сортировка по возрастанию |
false |
сортировка по убыванию |
Пример:
sortAscending: false
getSortData определяет правила извлечения данных для сортировки.
Пример конфигурации:
getSortData: {
name: '.name',
price: '.price parseFloat',
number: '[data-number] parseInt'
}
Возможные способы извлечения данных:
| Тип | Пример |
|---|---|
| текст из элемента | .title |
| атрибут | [data-price] |
| числовое значение | parseFloat |
| целое число | parseInt |
Пример сортировки по цене:
sortBy: 'price'
Параметр sortHistory сохраняет предыдущие параметры сортировки.
Значение по умолчанию:
sortHistory: true
При повторной сортировке учитывается предыдущая последовательность критериев.
Отключение истории:
sortHistory: false
layoutInstant определяет, должна ли компоновка выполняться без анимации.
По умолчанию:
layoutInstant: false
Если установить:
layoutInstant: true
элементы будут мгновенно перемещаться без переходов.
Это используется для ускорения операций фильтрации на больших наборах данных.
Пример инициализации Isotope с набором основных параметров:
var iso = new Isotope('.grid', {
itemSelector: '.grid-item',
layoutMode: 'masonry',
percentPosition: true,
transitionDuration: '0.4s',
filter: '*',
sortBy: 'original-order',
sortAscending: true,
stagger: 30,
resize: true
});
Такой набор настроек формирует стандартную каскадную сетку с плавной анимацией, поддержкой фильтрации и сортировки, а также автоматической адаптацией к изменению размеров окна браузера.