Библиотека Masonry для JavaScript известна своей гибкой системой построения сеток, однако при переходе между версиями разработчики сталкиваются с breaking changes, влияющими на совместимость и поведение кода. Эти изменения могут затрагивать как методы и API, так и обработку параметров и событий.
Ранее Masonry позволял инициализировать сетку следующим образом:
var msnry = new Masonry('.grid', {
itemSelector: '.grid-item',
columnWidth: 200,
gutter: 10
});
В новых версиях:
columnWidth теперь рекомендуется указывать через
элемент или функцию, а не только через число.document.querySelector или непосредственно элемент:var grid = document.querySelector('.grid');
var msnry = new Masonry(grid, {
itemSelector: '.grid-item',
columnWidth: '.grid-sizer'
});
Masonry.data() для получения экземпляра теперь
может работать иначе, так как внутренняя структура хранения экземпляров
была переработана.События layoutComplete, removeComplete,
appendComplete теперь имеют другой порядок аргументов или
обновлен способ их подписки. Пример старого синтаксиса:
msnry.on('layoutComplete', function(items) {
console.log('Layout finished for', items.length, 'items');
});
В новых версиях необходимо учитывать:
items теперь может быть массивом объектов с
другими свойствами.imagesLoaded интеграция изменилась.До изменений часто использовался подход:
var elems = document.querySelectorAll('.new-items');
msnry.appended(elems);
Теперь для корректного отображения динамических элементов требуется:
appended и layout в
правильной последовательности:imagesLoaded(newElems, function() {
msnry.appended(newElems);
msnry.layout();
});
reloadItems() и layout()
могут работать иначе, изменив внутреннее распределение элементов.Некоторые методы претерпели существенные изменения:
| Метод (старый) | Метод (новый) / изменение | Примечание |
|---|---|---|
reloadItems() |
Теперь рекомендуется использовать addItems() |
Более гибкая работа с новыми элементами |
remove() |
Аргументы теперь требуют DOM-элемент, а не селектор | Изменена обработка коллекций элементов |
layout() |
Поддерживает дополнительные опции с новыми версиями | Влияние на анимацию и пересчёт размеров |
Ряд параметров был переименован или изменил тип значения:
fitWidth – сохраняет прежнее название, но поведение по
умолчанию изменилось на false.gutter – теперь допускает указание не только числа, но
и строки с единицами CSS ('10px').transitionDuration – значения типа 0 или
undefined теперь трактуются иначе: для полного отключения
анимации рекомендуется явно указать '0s'.Ранее Masonry нередко использовался совместно с imagesLoaded и jQuery:
masonry-item,
masonry-column могут изменяться между версиями.columnWidth,
gutter, fitWidth и
transitionDuration.layout(), remove(),
reloadItems().Эти изменения критичны при обновлении Masonry на новые версии и напрямую влияют на стабильность и визуальную консистентность сеток.