Событие insertComplete является одним из ключевых
механизмов взаимодействия с динамически добавляемыми элементами в
библиотеке Isotope. Оно срабатывает после того, как новые
элементы были добавлены в контейнер и полностью обработаны
Isotope, включая все анимации и пересчёт расположения.
Подписка на событие осуществляется через метод on
объекта Isotope:
var iso = new Isotope('.grid', {
itemSelector: '.grid-item',
layoutMode: 'masonry'
});
iso.on('insertComplete', function(event, addedItems){
console.log('Добавлены элементы:', addedItems);
});
event — стандартный объект события JavaScript.addedItems — массив DOM-элементов, которые были
добавлены и обработаны Isotope. Это не jQuery-объекты,
а реальные узлы DOM.Событие возникает только после того, как:
appended или аналогичный.Пример добавления элементов с последующим отслеживанием:
var newItems = document.createElement('div');
newItems.className = 'grid-item';
newItems.textContent = 'Новый элемент';
iso.appended(newItems);
iso.on('insertComplete', function(event, addedItems){
addedItems.forEach(function(item){
item.style.border = '2px solid red';
});
});
В этом примере новый элемент не просто добавлен в DOM, но и полностью интегрирован в сетку Isotope. После этого можно безопасно применять стили, инициализировать плагины или привязывать обработчики событий.
Isotope предоставляет несколько событий для отслеживания динамических изменений:
| Событие | Момент срабатывания |
|---|---|
arrangeComplete |
После завершения любого пересчёта расположения |
layoutComplete |
После выполнения layoutMode и анимаций |
insertComplete |
После добавления элементов и полной интеграции их в сетку |
Главное отличие insertComplete — это именно
добавление новых элементов, а не простая перерасстановка
существующих.
insertComplete.insertComplete.var itemsArray = [];
for (var i = 0; i < 5; i++) {
var item = document.createElement('div');
item.className = 'grid-item';
item.textContent = 'Элемент ' + (i + 1);
itemsArray.push(item);
}
iso.appended(itemsArray);
iso.on('insertComplete', function(event, addedItems){
console.log('Добавлено элементов:', addedItems.length);
});
В этом примере все 5 элементов добавляются одновременно, и событие
insertComplete срабатывает единожды,
возвращая массив всех добавленных элементов.
Isotope учитывает CSS-переходы при вставке элементов. Если для
.grid-item задано свойство transition, то
событие insertComplete будет вызвано только после
завершения анимации перемещения. Это гарантирует корректное
отображение сетки и предотвращает визуальные артефакты.
appended(items) — добавляет элементы и инициирует
событие insertComplete.prepended(items) — вставляет элементы в начало
контейнера; также вызывает insertComplete.insert(items) — универсальный метод вставки элементов в
контейнер; завершение обработки новых элементов сопровождается событием
insertComplete.appended или insert, иначе событие
может быть пропущено.addedItems.length) помогает контролировать правильность
вставки.imagesLoaded можно дождаться загрузки
изображений перед пересчётом layout, чтобы избежать неправильного
расположения элементов.imagesLoaded(newItems, function(){
iso.appended(newItems);
});
iso.on('insertComplete', function(event, addedItems){
console.log('Элементы с изображениями полностью вставлены');
});
Такой подход обеспечивает корректное отображение динамического контента и минимизирует смещение элементов при загрузке медиафайлов.
insertComplete вызывается только после полной
интеграции новых элементов в сетку.arrangeComplete и
layoutComplete, так как отслеживает именно
добавление элементов, а не пересчёт существующих.