Dragula — это легковесная JavaScript-библиотека для реализации функционала перетаскивания элементов между контейнерами. Она минималистична, не требует внешних зависимостей, при этом предоставляет богатый набор методов и событий для управления поведением элементов.
Для создания области перетаскивания используется функция
dragula(). В качестве аргумента передается массив
контейнеров, элементы которых будут доступны для перетаскивания:
const containers = [document.getElementById('left'), document.getElementById('right')];
const drake = dragula(containers);
После этого все элементы внутри указанных контейнеров становятся «перетаскиваемыми». Dragula автоматически добавляет необходимые слушатели событий для управления переносом.
Библиотека Dragula поддерживает конфигурирование поведения через объект опций при инициализации:
const drake = dragula(containers, {
moves: (el, source, handle, sibling) => handle.classList.contains('handle'),
accepts: (el, target, source, sibling) => !target.classList.contains('no-drop'),
copy: false,
revertOnSpill: true,
removeOnSpill: false,
});
handle позволяет реализовать перетаскивание только при
захвате за определенную область.true, элемент копируется,
а не перемещается.true.Dragula не использует традиционные перечисления (enum) из TypeScript или других языков, но поддерживает ряд строковых констант, которые определяют типы событий и состояния элементов. Основные из них:
drake.cancel().Пример подписки на события:
drake.on('drag', (el) => {
el.style.opacity = '0.5';
});
drake.on('drop', (el, target, source, sibling) => {
el.style.opacity = '';
});
drake.on('remove', (el, container) => {
console.log(`Элемент удален из контейнера ${container.id}`);
});
Dragula предоставляет ключевые методы, которые можно рассматривать как динамические константы поведения:
Эти методы обеспечивают точный контроль над состоянием элементов и контейнеров в процессе перетаскивания.
Dragula позволяет динамически добавлять и удалять контейнеры:
drake.containers.push(document.getElementById('new-container'));
Также доступно управление списком элементов через объект
drake.models, что полезно при интеграции с фреймворками и
сохранении состояния в базе данных.
Dragula поддерживает следующие события, которые можно рассматривать как «перечисления событий»:
copy: true.Использование этих событий позволяет реализовать гибкие сценарии с анимацией, ограничением зон и сохранением последовательности элементов.
Dragula автоматически добавляет класс .gu-transit для
элемента, находящегося в процессе перетаскивания, и
.gu-mirror для его копии, если используется режим
копирования. Это позволяет легко настраивать CSS-анимации и стили для
перетаскиваемых элементов.
Использование констант Dragula и подписка на события обеспечивает предсказуемое поведение элементов в интерфейсе. Комбинируя методы, параметры и события, можно реализовать:
Dragula сочетает минимализм кода с гибкостью управления, позволяя строить сложные интерфейсы без дополнительного бэкэнда или больших фреймворков.