Библиотека Masonry для JavaScript предоставляет мощный инструмент для организации сетки элементов с динамическими размерами. Со временем некоторые функции и параметры устаревают и помечаются как deprecated, что означает их постепенное удаление в будущих версиях. Работа с устаревшими методами требует внимательности, так как использование таких функций может привести к непредсказуемому поведению или ошибкам при обновлении библиотеки.
Masonry.prototype.layout с синтаксисом до
версии 4Ранее метод layout вызывался с прямым указанием
columnWidth и gutter через объект опций:
var msnry = new Masonry( '.grid', {
columnWidth: 200,
gutter: 10
});
msnry.layout({ columnWidth: 200, gutter: 10 }); // устаревший синтаксис
Начиная с версии 4, рекомендуется использовать инициализацию
через объект опций, а не передавать параметры напрямую в
layout. Новый подход позволяет библиотеке корректно
пересчитывать сетку при изменении размеров контейнера или элементов:
var msnry = new Masonry( '.grid', {
itemSelector: '.grid-item',
columnWidth: '.grid-sizer',
gutter: '.gutter-sizer'
});
msnry.layout(); // без передачи параметров
isResizableРанее Masonry автоматически отслеживал изменения размера контейнера
при помощи свойства isResizable: true. Этот параметр был
помечен как deprecated, так как библиотека перешла на использование
встроенного слушателя событий resize через
window:
var msnry = new Masonry('.grid', {
itemSelector: '.grid-item',
isResizable: true // deprecated
});
Новый способ контроля реакции на изменение размера:
var msnry = new Masonry('.grid', {
itemSelector: '.grid-item'
});
window.addEventListener('resize', function() {
msnry.layout();
});
destroy и
reloadItemsМетод destroy устарел в версии 4 и заменён на
msnry.remove() и
msnry.layout() для очистки и перестройки
сетки:
// Deprecated
msnry.destroy();
// Рекомендуется
msnry.remove(msnry.items);
msnry.layout();
Метод reloadItems, который использовался для обновления
набора элементов Masonry после изменения DOM, также считается
устаревшим. Вместо него применяется msnry.appended() или
msnry.prepended() в сочетании с вызовом
layout:
// Deprecated
msnry.reloadItems();
// Новый подход
var newElements = document.querySelectorAll('.new-grid-item');
msnry.appended(newElements);
msnry.layout();
isFitWidth — ранее позволяла
автоматически подгонять ширину контейнера под элементы. Сейчас
рекомендуется контролировать ширину контейнера через CSS, а Masonry
автоматически подстраивает позиции элементов.
stamp с массивом элементов — ранее
можно было передавать массив DOM-элементов, чтобы их игнорировать при
вычислении сетки. Сейчас поддерживается только селектор или одиночный
элемент, массивы устарели:
// Deprecated
msnry = new Masonry('.grid', { stamp: [el1, el2] });
// Новый подход
msnry = new Masonry('.grid', { stamp: '.stamped-item' });
transitionDuration с числом в
миллисекундах — раньше можно было указывать время анимации
через число. Сейчас поддерживается строка с CSS-форматом, например
"0.4s":// Deprecated
var msnry = new Masonry('.grid', { transitionDuration: 400 });
// Новый подход
var msnry = new Masonry('.grid', { transitionDuration: '0.4s' });
window.addEventListener), а не на
встроенные deprecated параметры.destroy и
reloadItems на сочетание remove,
prepended/appended и layout.var grid = document.querySelector('.grid');
var msnry = new Masonry(grid, {
itemSelector: '.grid-item',
columnWidth: '.grid-sizer',
gutter: '.gutter-sizer',
transitionDuration: '0.4s'
});
// Добавление новых элементов
var newItems = document.querySelectorAll('.grid-item-new');
msnry.appended(newItems);
msnry.layout();
// Обработка ресайза
window.addEventListener('resize', function() {
msnry.layout();
});
// Игнорирование штампованных элементов
msnry.stamp(document.querySelector('.stamped-item'));
В этом примере полностью исключены deprecated методы и опции, обеспечивая совместимость с последними версиями Masonry и предотвращая потенциальные ошибки при обновлениях.