В библиотеке Isotope управление элементами не ограничивается только их фильтрацией и сортировкой. Удаление существующих элементов — одна из ключевых операций, которая позволяет динамически изменять содержимое контейнера, при этом поддерживая плавные анимации и корректное перераспределение оставшихся элементов.
Основной метод для удаления элементов — это remove. Он
позволяет удалить один или несколько элементов из контейнера
Isotope и автоматически обновить раскладку.
Синтаксис:
$grid.isotope('remove', $items)
.isotope('layout');
$grid — контейнер Isotope, обычно
выбранный через jQuery: $('.grid').$items — jQuery-объект, содержащий элементы, которые
необходимо удалить.layout — обязательный вызов после remove,
чтобы библиотека пересчитала расположение оставшихся элементов.Пример:
var $grid = $('.grid').isotope({
itemSelector: '.grid-item',
layoutMode: 'masonry'
});
// Удаление всех элементов с классом .remove
var $itemsToRemove = $grid.find('.remove');
$grid.isotope('remove', $itemsToRemove)
.isotope('layout');
Isotope поддерживает плавное удаление элементов с использованием
CSS-переходов. Для корректной анимации необходимо настроить свойства
transitionDuration при инициализации контейнера:
var $grid = $('.grid').isotope({
itemSelector: '.grid-item',
layoutMode: 'masonry',
transitionDuration: '0.6s'
});
После вызова remove элементы исчезнут плавно, а
оставшиеся займут их место с анимацией, заданной
transitionDuration.
Часто требуется удалять элементы не по конкретному селектору, а по определённому условию, например, по атрибуту или содержимому:
$grid.find('.grid-item').each(function() {
if ($(this).data('remove') === true) {
$grid.isotope('remove', $(this));
}
});
$grid.isotope('layout');
Такой подход позволяет гибко управлять удалением элементов без необходимости заранее добавлять классы для каждого объекта.
Удаление элементов корректно работает вместе с фильтрацией и
сортировкой. Например, если контейнер уже отфильтрован,
remove удаляет элементы из текущего состояния отображения и
автоматически обновляет видимые элементы:
$grid.isotope({ filter: '.active' });
$grid.isotope('remove', $grid.find('.grid-item.to-remove'))
.isotope('layout');
Это обеспечивает плавную интеграцию динамических изменений с уже установленными фильтрами.
Для удаления большого количества элементов рекомендуется формировать
jQuery-коллекцию всех элементов, которые подлежат удалению, и вызвать
remove один раз. Это более эффективно, чем удаление по
одному элементу в цикле:
var $allToRemove = $grid.find('.old-item');
$grid.isotope('remove', $allToRemove)
.isotope('layout');
При динамическом добавлении элементов с помощью метода
appended их также можно удалять стандартным способом
remove. Это позволяет создавать полноценные интерактивные
интерфейсы:
var $newItems = $('<div class="grid-item new">Новый элемент</div>');
$grid.append($newItems)
.isotope('appended', $newItems);
// Позже удалить
$grid.isotope('remove', $newItems)
.isotope('layout');
Таким образом, Isotope обеспечивает единый подход к управлению элементами: добавление, удаление и фильтрация работают согласованно и поддерживают анимации.
layout после remove, чтобы
избежать некорректного расположения элементов.transitionDuration.appended и
remove для управления элементами.