Событие arrangeComplete является ключевым инструментом
для управления поведением сетки элементов после выполнения операции
arrange в библиотеке Isotope. Оно срабатывает каждый
раз, когда элементы завершили перестановку или фильтрацию, позволяя
синхронизировать дополнительные действия с визуальными изменениями.
arrange,
filter, sort, или layout.Пример структуры события:
$grid.on( 'arrangeComplete', function( event, filteredItems ) {
console.log('Операция arrange завершена');
console.log(filteredItems); // массив объектов IsotopeItem
});
event – стандартный объект события
jQuery/JavaScript.
filteredItems – массив объектов
IsotopeItem, содержащий элементы, которые были
отфильтрованы или переставлены. Каждый объект включает следующие
свойства:
element – DOM-элемент.isotope – ссылка на внутренний объект IsotopeItem.position – координаты нового расположения
элемента.hidden – булевое значение, указывающее на видимость
элемента.Использование filteredItems позволяет выполнять действия
с конкретными элементами сетки, например, добавлять CSS-анимации или
обновлять контент динамически.
1. Событие после фильтрации
var $grid = $('.grid').isotope({
itemSelector: '.grid-item',
layoutMode: 'fitRows'
});
$grid.isotope({ filter: '.category-a' });
$grid.on('arrangeComplete', function(event, filteredItems) {
console.log('Отфильтровано элементов:', filteredItems.length);
filteredItems.forEach(function(item) {
$(item.element).addClass('highlight');
});
});
Особенности:
2. Использование с сортировкой
$grid.isotope({ sortBy: 'name' });
$grid.on('arrangeComplete', function(event, filteredItems) {
console.log('Сортировка завершена. Первые элементы:', filteredItems.slice(0,3));
});
Примечание:
layoutComplete – срабатывает после полной перестройки
сетки, даже если элементы не изменили порядок.arrangeComplete – более узконаправленное событие,
реагирующее только на фактическое перемещение
элементов.arrangeComplete, если
необходимо точно отслеживать завершение визуальной анимации, а
layoutComplete – для любых изменений макета.filteredItems для выполнения действий только с видимыми
элементами.$grid.off('arrangeComplete'), чтобы избежать утечек
памяти.filteredItems содержит объекты,
а не чистые DOM-элементы. Нужно использовать
item.element.filteredItems.length, что может привести к ошибкам при
пустой фильтрации.console.log(filteredItems) для понимания,
какие элементы задействованы.arrangeComplete действительно
срабатывает.layout() или
appended() перед arrange.Событие arrangeComplete предоставляет полный контроль
над сеткой Isotope после любых перестановок и фильтраций, делая
возможным точное и безопасное управление элементами интерфейса,
синхронизацию анимаций и динамическое обновление контента.