Isotope является мощной библиотекой для динамической сортировки, фильтрации и расположения элементов на веб-странице. С течением времени API библиотеки претерпело значительные изменения, что отражается на способах инициализации, настройке и взаимодействии с объектами Isotope. Важно понимать эти изменения, чтобы корректно использовать библиотеку в современных проектах.
Ранее инициализация Isotope выполнялась через прямой вызов конструктора с элементом-контейнером и объектом настроек:
var iso = new Isotope(container, {
itemSelector: '.grid-item',
layoutMode: 'masonry'
});
В последних версиях API добавлена возможность инициализации с
использованием метода .isotope() на jQuery-объекте, что
обеспечивает совместимость с jQuery-плагинами и упрощает цепочки
вызовов:
$('.grid').isotope({
itemSelector: '.grid-item',
layoutMode: 'fitRows'
});
Основные изменения здесь:
vertical, cellsByRow, а также настраиваемые
режимы через расширяемые модули.Ранее фильтрация выполнялась напрямую через вызов метода
arrange с ключом filter:
iso.arrange({ filter: '.category-a' });
В новых версиях добавлены асинхронные возможности и поддержка динамических функций фильтрации:
iso.arrange({
filter: function(itemElem) {
var number = parseInt(itemElem.querySelector('.number').textContent, 10);
return number > 10;
}
});
Ключевые изменения:
filter может быть строкой селектора, функцией или
массивом селекторов.true или false из функции
фильтрации определяет видимость элемента.sortBy) теперь поддерживают
кастомные функции и множественные критерии сортировки.Ранее при добавлении новых элементов необходимо было повторно
вызывать инициализацию или использовать метод appended:
iso.appended(newItems);
iso.layout();
Теперь API позволяет:
appended и removed, при этом
автоматически вызывается перерасчёт расположения.reloadItems() для полной пересборки
внутренних данных без полной реинициализации:iso.reloadItems();
iso.arrange();
Раньше библиотека поддерживала ограниченный набор событий, таких как
arrangeComplete и layoutComplete. В последних
версиях добавлены:
removeComplete — срабатывает после удаления
элементов.appendComplete — после добавления новых элементов.layoutStart и layoutEnd — позволяют
отслеживать начало и окончание перестановки элементов.Пример использования новых событий:
iso.on('layoutComplete', function(event, laidOutItems) {
console.log('Рассчитано элементов:', laidOutItems.length);
});
API анимации стало более гибким:
transitionDuration и
hiddenStyle/visibleStyle позволяют детально
настраивать анимацию появления и исчезновения элементов.var iso = new Isotope('.grid', {
itemSelector: '.grid-item',
transitionDuration: '0.6s',
hiddenStyle: { opacity: 0, transform: 'scale(0.5)' },
visibleStyle: { opacity: 1, transform: 'scale(1)' }
});
Изменения касаются как плавности анимации, так и её совместимости с различными браузерами и режимами расположения.
Некоторые методы старого API были помечены как deprecated:
shuffle теперь рекомендуется заменять на
arrange({ sortBy: 'random' }).*Complete считаются
устаревшими.masonry.columnWidth и fitRows.gutter
требуют явного указания размеров через CSS или JavaScript для
корректного расчёта сетки.Важно учитывать, что использование устаревших методов может вызвать предупреждения в консоли и непредсказуемое поведение на новых версиях библиотеки.
Современный подход к использованию Isotope предполагает:
appended,
removed, reloadItems.transitionDuration, hiddenStyle,
visibleStyle.layoutComplete,
appendComplete, removeComplete для контроля
состояния сетки.Такой подход обеспечивает гибкость, стабильность и совместимость с современными веб-технологиями.