Isotope — это мощная JavaScript-библиотека, предназначенная для динамической организации элементов в сетке с поддержкой фильтрации, сортировки и анимации. В основе её работы лежит позиционирование элементов с использованием CSS-трансформаций, что позволяет создавать плавные и отзывчивые интерфейсы.
Для начала работы необходимо создать экземпляр Isotope и связать его с контейнером элементов:
var grid = document.querySelector('.grid');
var iso = new Isotope(grid, {
itemSelector: '.grid-item',
layoutMode: 'masonry',
transitionDuration: '0.4s'
});
masonry, fitRows,
vertical).Isotope позволяет динамически показывать только определённые элементы
на основе заданных критериев. Для фильтрации используется метод
arrange:
iso.arrange({
filter: '.category-1'
});
.category-1 покажет только элементы с этим
классом.Сортировка осуществляется через свойства элементов и метод
arrange с ключом sortBy:
iso.arrange({
sortBy: 'name',
getSortData: {
name: '.name',
date: '[data-date] parseInt'
}
});
Isotope поддерживает динамическое добавление и удаление элементов:
var items = document.querySelectorAll('.new-item');
iso.appended(items);
var removeItem = document.querySelector('.grid-item');
iso.remove(removeItem);
iso.layout();
Изменение порядка элементов возможно через методы
updateSortData и shuffle:
iso.updateSortData();
iso.shuffle();
Isotope предоставляет события, которые позволяют отслеживать изменения:
iso.on('arrangeComplete', function(filteredItems) {
console.log('Сортировка или фильтрация завершена', filteredItems);
});
Для удобства навигации можно связывать фильтрацию и сортировку с событиями клавиатуры:
document.addEventListener('keydown', function(e) {
switch(e.key) {
case 'ArrowUp':
iso.arrange({ filter: '.up-category' });
break;
case 'ArrowDown':
iso.arrange({ filter: '.down-category' });
break;
case 's':
iso.arrange({ sortBy: 'name' });
break;
}
});
Использование Isotope позволяет создать динамическую, интерактивную сетку элементов, которая поддерживает как визуальные эффекты, так и удобную клавиатурную навигацию для улучшения UX.