Isotope — это библиотека для динамического расположения элементов на веб-странице с поддержкой фильтрации, сортировки и анимации. Одной из ключевых возможностей, расширяющих функциональность, является динамическая загрузка контента через AJAX, что позволяет подгружать новые элементы без перезагрузки страницы и автоматически интегрировать их в существующую сетку.
Перед загрузкой данных через AJAX необходимо правильно инициализировать контейнер Isotope. Обычно это делается следующим образом:
var $grid = $('.grid').isotope({
itemSelector: '.grid-item',
layoutMode: 'masonry', // Возможны также 'fitRows' или 'vertical'
percentPosition: true,
masonry: {
columnWidth: '.grid-sizer'
}
});
Здесь itemSelector указывает на элементы, которые будут
управляться Isotope, а layoutMode определяет способ
раскладки. grid-sizer используется для установки базовой
ширины колонок при masonry.
Для подгрузки новых элементов используется стандартный подход с
fetch или jQuery.ajax. Важным моментом
является правильное создание DOM-элементов перед добавлением их в сетку
Isotope.
$.ajax({
url: '/path/to/data',
method: 'GET',
dataType: 'html',
success: function(response) {
var $items = $(response); // Преобразуем HTML в jQuery объекты
$grid.append($items) // Добавляем элементы в контейнер
.isotope('appended', $items); // Сообщаем Isotope о новых элементах
}
});
Ключевое здесь — использование метода appended, который
позволяет Isotope корректно рассчитать позиции для новых элементов и
применить анимацию.
После динамического добавления элементов через AJAX они автоматически становятся частью сетки, но при необходимости их можно сразу фильтровать или сортировать:
$grid.isotope({ filter: '.category-a' });
$grid.isotope({ sortBy: 'name' });
Это особенно полезно, если новый контент относится к определённой категории и должен сразу отображаться согласно текущим условиям фильтрации.
Для корректного расположения элементов с изображениями рекомендуется
использовать плагин imagesLoaded, чтобы дождаться полной
загрузки картинок перед расчетом сетки:
$items.imagesLoaded().progress(function() {
$grid.isotope('layout');
});
Этот шаг предотвращает смещение элементов и обеспечивает плавное отображение при загрузке больших изображений.
Часто AJAX используется для реализации бесконечной прокрутки или подгрузки страниц при пагинации. Основной подход заключается в следующем:
appended.layout для пересчёта сетки.$('#load-more').on('click', function() {
var nextPage = $(this).data('page');
$.get('/load/page/' + nextPage, function(response) {
var $newItems = $(response);
$grid.append($newItems).isotope('appended', $newItems);
$newItems.imagesLoaded().progress(function() {
$grid.isotope('layout');
});
});
});
При работе с большим количеством элементов рекомендуется:
layout только после полной загрузки всех
изображений.Isotope автоматически применяет анимацию при добавлении новых
элементов. Для управления скоростью и стилем анимации можно использовать
параметры transitionDuration и CSS-трансформации:
$grid.isotope({
transitionDuration: '0.8s'
});
Это позволяет создавать плавное появление новых элементов при динамическом подгрузе.
append и
уведомление Isotope через appended.imagesLoaded для корректной
компоновки.layout.Эта схема позволяет интегрировать динамический контент в сетку Isotope максимально плавно, обеспечивая гибкую фильтрацию, сортировку и визуально привлекательную анимацию.