Событие dragend в библиотеке Dragula является ключевым
этапом работы с элементами перетаскивания. Оно срабатывает в момент,
когда пользователь завершает перемещение элемента, отпуская его мышью
или касанием на сенсорном устройстве. Это событие предоставляет
возможность выполнить завершающие операции, такие как очистка временных
стилей, сохранение нового порядка элементов или синхронизация данных с
сервером.
dragendel) и на
исходный контейнер (source), что позволяет выполнить любые
операции с DOM.dragend вызывается после событий drag и
drop, что обеспечивает контроль над процессом от начала до
конца.Событие dragend добавляется через метод
.on() объекта Dragula:
const drake = dragula([container1, container2]);
drake.on('dragend', function(el) {
console.log('Элемент завершил перетаскивание:', el);
el.style.backgroundColor = ''; // убираем временные стили
});
В этом примере происходит восстановление исходного стиля элемента после завершения перетаскивания. Это важно, потому что Dragula временно модифицирует элементы для визуального эффекта перетаскивания.
gu-transit и инлайн-стили
для позиционирования. После завершения перетаскивания необходимо удалить
эти стили, чтобы элемент вернулся к нормальному отображению.drake.on('dragend', function(el) {
el.classList.remove('gu-transit');
el.style.transform = '';
el.style.transition = '';
});
drake.on('dragend', function() {
const updatedOrder = Array.from(container1.children).map(el => el.dataset.id);
console.log('Новый порядок элементов:', updatedOrder);
});
dragend можно использовать для отслеживания действий
пользователя, например, фиксации перемещений в интерфейсе или отправки
событий на сервер.drake.on('dragend', function(el, target, source) {
fetch('/analytics', {
method: 'POST',
body: JSON.stringify({
elementId: el.dataset.id,
sourceContainer: source.id,
targetContainer: target ? target.id : null
}),
headers: { 'Content-Type': 'application/json' }
});
});
drop и
dragdrag: срабатывает при начале
перетаскивания.drop: срабатывает только если элемент
был перемещён в другой контейнер.dragend: срабатывает всегда при
завершении перетаскивания, даже если элемент вернулся на место.Это делает dragend идеальным местом для операций очистки
или любых действий, которые должны произойти независимо от того, был
элемент перемещён или нет.
dragend.dragend для окончательной синхронизации
состояния интерфейса и данных.dragend для изменения позиции элемента
в DOM — для этого используется drop. dragend
служит именно завершающим сигналом о прекращении взаимодействия.const drake = dragula([list1, list2]);
drake.on('drag', function(el) {
el.style.opacity = '0.5';
});
drake.on('drop', function(el, target, source, sibling) {
console.log(`Элемент перемещён в контейнер ${target.id}`);
});
drake.on('dragend', function(el) {
el.style.opacity = '';
el.classList.remove('gu-transit');
console.log('Перетаскивание завершено для элемента', el.dataset.id);
});
В этом примере видна последовательность событий: изменение стиля при
drag, фиксация позиции при drop и
восстановление внешнего вида при dragend. Это демонстрирует
полное управление процессом перетаскивания с учётом всех этапов.
dragendСобытие dragend является критическим для поддержания
корректного визуального состояния интерфейса и синхронизации данных
после взаимодействия пользователя. Оно обеспечивает уверенность в том,
что любые временные эффекты перетаскивания будут удалены, а состояние
приложения — актуализировано. Использование dragend вместе
с другими событиями Dragula позволяет строить сложные интерфейсы с
полной прозрачностью и предсказуемостью поведения элементов.