Packery — это мощная библиотека для управления сетками и расположением элементов на странице с гибкой поддержкой динамических изменений. Одним из ключевых аспектов работы с библиотекой является возможность изменять опции после инициализации, что позволяет адаптировать сетку под новые условия без полной перестройки.
Packery инициализируется через конструктор:
var grid = new Packery('.grid', {
itemSelector: '.grid-item',
gutter: 10,
percentPosition: true
});
После инициализации базовые опции можно изменить с помощью метода
options, передав объект с новыми значениями. Например:
grid.options.gutter = 20;
grid.layout();
Ключевые моменты:
options является объектом, где хранятся
текущие настройки сетки.grid.layout()
для перерасчёта расположения элементов.gutter — отступ между элементами Увеличение или
уменьшение промежутков между элементами осуществляется напрямую через
options.gutter:
grid.options.gutter = 30;
grid.layout();columnWidth / rowHeight — размеры ячеек сетки Эти параметры задают базовую ширину и высоту элементов. При динамическом изменении рекомендуется использовать функцию или селектор, чтобы обеспечить адаптацию под новые размеры:
grid.options.columnWidth = '.grid-sizer';
grid.layout();percentPosition — использование процентных размеров Переход с абсолютных пикселей на процентные размеры влияет на пересчёт сетки:
grid.options.percentPosition = true;
grid.layout();Packery позволяет управлять драг-н-дроп и сортировкой через отдельные опции:
draggable — включение/отключение перетаскиванияstamp — выделение элементов, которые не участвуют в
стандартной компоновкеПример динамического включения перетаскивания:
grid.options.draggable = true;
grid.bindDraggableEvents(); // метод для повторной привязки событий
Важно: при изменении опции draggable
нужно заново привязать обработчики событий, иначе элементы не будут
реагировать на перетаскивание.
Если требуется изменить опции, которые напрямую влияют на внутренние
расчёты (например, itemSelector), часто проще выполнить
реинициализацию:
grid.destroy(); // удаляет текущую сетку и очистку событий
grid = new Packery('.grid', {
itemSelector: '.new-grid-item',
gutter: 15,
percentPosition: false
});
Такой подход гарантирует корректное применение всех новых опций без конфликтов.
Packery поддерживает динамическое добавление и удаление элементов, что тесно связано с изменением опций:
// добавление нового элемента
var newItem = document.createElement('div');
newItem.className = 'grid-item';
grid.appended(newItem);
grid.layout();
// удаление элемента
grid.remove(elem);
grid.layout();
При этом можно комбинировать изменения gutter или
columnWidth с добавлением новых элементов, чтобы сетка
автоматически адаптировалась под новые условия.
options и вызывать
layout().bindDraggableEvents().Динамическое управление опциями Packery позволяет строить
адаптивные и интерактивные сетки, которые изменяются
под действия пользователя, изменяющиеся размеры окна и новые элементы.
Правильное сочетание options, layout() и
методов добавления/удаления элементов обеспечивает гибкость и
устойчивость интерфейса.