Для работы с библиотекой Packery необходимо сначала подключить её скрипт и стили. Существует несколько способов подключения: через CDN или локально, сохранив файлы на сервере проекта. Использование локальных файлов позволяет полностью контролировать версию библиотеки и работу без зависимости от внешних ресурсов.
Пример структуры проекта с локальными файлами Packery:
/project
│
├─ index.html
├─ js/
│ ├─ packery.pkgd.min.js
│ └─ app.js
└─ css/
└─ styles.css
Здесь packery.pkgd.min.js — это минимизированная версия
Packery, скачанная с официального репозитория, а app.js —
собственный скрипт, где будет происходить инициализация сетки.
Локальный скрипт Packery подключается через тег
<script> в HTML:
<!DOCTYPE html>
<html lang="ru">
<head>
<meta charset="UTF-8">
<title>Пример Packery</title>
<link rel="stylesheet" href="css/styles.css">
</head>
<body>
<div class="grid">
<div class="grid-item">1</div>
<div class="grid-item">2</div>
<div class="grid-item">3</div>
<div class="grid-item">4</div>
</div>
<script src="js/packery.pkgd.min.js"></script>
<script src="js/app.js"></script>
</body>
</html>
Важно подключать packery.pkgd.min.js до
вашего скрипта app.js, чтобы библиотека была доступна для
инициализации.
Packery создаёт сетку на основе контейнера и элементов. В
app.js инициализация выглядит следующим образом:
const grid = document.querySelector('.grid');
const pckry = new Packery(grid, {
itemSelector: '.grid-item',
gutter: 10,
percentPosition: true
});
itemSelector — селектор элементов внутри
контейнера.gutter — расстояние между элементами.percentPosition — включает позиционирование с
процентными значениями, что полезно при адаптивной верстке.Packery может некорректно позиционировать элементы, если их размеры
неизвестны до полной загрузки контента. Для работы с изображениями
требуется дождаться их загрузки. Один из вариантов — использовать
событие load для всех изображений:
const images = grid.querySelectorAll('img');
let loadedImages = 0;
images.forEach(img => {
img.addEventListener('load', () => {
loadedImages++;
if (loadedImages === images.length) {
pckry.layout();
}
});
});
Для динамически добавляемых элементов используется метод
appended:
const newItem = document.createElement('div');
newItem.classList.add('grid-item');
newItem.textContent = 'Новый элемент';
grid.appendChild(newItem);
pckry.appended(newItem);
Чтобы элементы корректно располагались, важно задать размеры и отступы в CSS:
.grid {
max-width: 800px;
margin: 0 auto;
}
.grid-item {
width: 200px;
height: 200px;
background-color: #8bc34a;
border: 2px solid #ffffff;
box-sizing: border-box;
}
При адаптивной верстке можно использовать процентные значения ширины
элементов, что совместимо с percentPosition: true.
Скачивание библиотеки локально обеспечивает:
Обновление локальной версии требует повторного скачивания актуальной
сборки и замены файла packery.pkgd.min.js.
appended.Такой подход обеспечивает стабильное и предсказуемое поведение библиотеки, позволяет легко интегрировать её в любой проект без внешних зависимостей.