В библиотеке Muuri события layout
играют ключевую роль при управлении изменением расположения элементов
внутри сетки. Они позволяют отслеживать процесс перестановки элементов,
реагировать на завершение анимаций и выполнять дополнительные действия
после изменения структуры сетки. Понимание этих событий необходимо для
создания интерактивных, отзывчивых и динамичных интерфейсов.
События layout делятся на две основные
категории: события, связанные с началом процесса компоновки, и
события, информирующие о его завершении.
layoutlayoutStart Срабатывает в момент
начала перестановки элементов в сетке. На этом этапе Muuri вычисляет
новые позиции элементов, но фактическая анимация ещё не запущена.
Пример использования:
grid.on('layoutStart', function (items) {
console.log('Начало компоновки', items);
});
Параметры:
items – массив элементов, которые участвуют в текущей
перестановке.layoutEnd Срабатывает после того,
как все элементы завершили анимацию и заняли новые позиции. Это событие
удобно использовать для выполнения действий после визуального завершения
перестановки. Пример:
grid.on('layoutEnd', function (items) {
console.log('Компоновка завершена', items);
});
Параметры:
items – массив элементов, которые были перемещены или
переставлены.Каждый элемент Muuri (grid.getItems()) также генерирует
события компоновки, которые позволяют реагировать на изменения позиции
конкретного элемента.
move — срабатывает, когда элемент
перемещается в процессе компоновки.
item.getElement().addEventListener('move', function (event) {
console.log('Элемент перемещается', event);
});layout — срабатывает после того,
как элемент завершил анимацию и занял новое положение.
item.getElement().addEventListener('layout', function () {
console.log('Элемент занял новое место');
});Эти события особенно полезны для динамического управления классами CSS, анимациями или подгрузкой контента при перестановке элементов.
Muuri передаёт в обработчики события layout массив
элементов и объект с дополнительной информацией:
grid.on('layoutEnd', function (items, event) {
console.log('Items:', items);
console.log('Layout event info:', event);
});
Возможные свойства объекта события:
action — действие, вызвавшее перестановку
(move, add, remove,
filter, sort и т.д.).trigger — инициатор события (manual для
ручного вызова, auto для автоматической перестановки).items — элементы, которые были перемещены.События layout позволяют строить сложные интерактивные
сценарии, например:
Отслеживание завершения сортировки При сортировке элементов можно запускать дополнительные функции после того, как все элементы заняли новые позиции:
grid.sort('data-order');
grid.on('layoutEnd', function (items) {
highlightNewItems(items);
});Интеграция с анимациями CSS Можно добавлять классы для анимации только после завершения компоновки:
grid.on('layoutEnd', function (items) {
items.forEach(item => {
item.getElement().classList.add('animation-complete');
});
});Динамическое подгружение контента После перестановки элементов можно загружать дополнительный контент в элементы, которые заняли новые позиции, что особенно актуально для сеток с ленивой загрузкой изображений.
layout от dragReleaseEndСобытия layout связаны с перестановкой элементов
независимо от их источника: сортировка, фильтрация, добавление или
удаление элементов.
Событие dragReleaseEnd срабатывает
исключительно после завершения перетаскивания элемента пользователем.
Таким образом, для отслеживания визуальных перестановок всей сетки лучше
использовать layoutStart и layoutEnd, а для
индивидуального контроля над драгом — dragReleaseEnd.
layoutEnd тяжёлыми
вычислениями, так как это может замедлить визуальную реакцию сетки.layoutStart для подготовки
элементов к анимации (например, добавление временных классов).items внутри обработчика, чтобы
обрабатывать только нужные элементы.События layout в Muuri создают мощный инструмент для
контроля над поведением сетки на всех этапах перестановки элементов.
Грамотное использование этих событий позволяет синхронизировать
визуальные эффекты, данные и интерактивные сценарии, делая интерфейс
динамичным и отзывчивым.