Dragula — это легковесная библиотека для реализации drag-and-drop взаимодействий между элементами HTML. Одним из ключевых аспектов управления перетаскиванием является направление перемещения элементов, которое влияет на поведение и логику интерфейса.
В Dragula направление перетаскивания управляется с помощью опции
direction. Эта опция определяет, по какой оси будет
происходить сортировка элементов внутри контейнера. Доступны
два значения:
vertical — элементы перемещаются по вертикали
(стандартный режим для списков).horizontal — элементы перемещаются по горизонтали
(подходит для ряда карточек, галерей и элементов меню).Если опция не указана, по умолчанию используется
vertical. Правильная настройка направления позволяет
избежать конфликтов при перетаскивании и обеспечивает корректное
позиционирование элементов.
Опция задается при инициализации Dragula следующим образом:
const drake = dragula([container], {
direction: 'horizontal' // или 'vertical'
});
container — это DOM-элемент или массив элементов, внутри
которых разрешено перетаскивание. Важно помнить, что направление
действует только для элементов внутри конкретного
контейнера, поэтому при наличии нескольких контейнеров можно
задавать разные направления:
const drake = dragula([list1, list2], {
direction: 'vertical'
});
Направление перетаскивания напрямую влияет на алгоритм перестановки
элементов. При vertical Dragula ориентируется на
координату Y курсора, чтобы определить, выше или ниже
текущий элемент должен быть размещен. При horizontal
учитывается координата X, что особенно важно при
создании интерфейсов с горизонтальными полосами карточек или блоков.
Пример визуального эффекта:
Правильное направление перетаскивания требует соответствующего оформления контейнера и элементов:
vertical рекомендуется использовать
display: block или
flex-direction: column.horizontal лучше использовать
display: flex и flex-direction: row.Необходимо контролировать размеры элементов, чтобы Dragula корректно определял границы и предотвращал «прыжки» при перетаскивании.
Направление часто используется совместно с другими параметрами Dragula:
moves — функция, которая определяет, можно ли
перетаскивать конкретный элемент.accepts — функция, ограничивающая, в какие контейнеры
допускается перемещать элемент.mirrorContainer — контейнер, в котором создается
визуальная копия перетаскиваемого элемента.Например, для горизонтального меню можно задать:
const drake = dragula([menu], {
direction: 'horizontal',
moves: (el, source, handle) => handle.classList.contains('handle'),
accepts: (el, target) => target.id === 'menu'
});
overflow для
ограничения области перетаскивания — направление влияет только на
порядок элементов внутри контейнера.Настройка направления обеспечивает естественное поведение интерфейса, снижает ошибки при перетаскивании и повышает удобство использования.