Метод drake.remove() в библиотеке Dragula предназначен
для управления удалением элементов из контейнеров при реализации
перетаскивания. Он позволяет программно удалить элемент, либо отклонить
его перенос в случае, если требуется контроль над перемещением. Работа с
этим методом требует понимания внутренней архитектуры Dragula, поскольку
она напрямую взаимодействует с DOM-элементами, используемыми для
перетаскивания.
drake.remove([el]);
el — необязательный параметр,
DOM-элемент, который необходимо удалить из контейнера. Если параметр не
указан, метод действует на текущий элемент, который находится в процессе
перетаскивания.Программное удаление элемента Позволяет удалить
конкретный элемент без необходимости вручную изменять DOM. Это особенно
полезно при динамическом управлении списками и при обработке событий
drop или cancel.
Совместимость с событиями Dragula Метод интегрируется с такими событиями, как:
drag — начало перетаскивания;drop — завершение перетаскивания;cancel — отмена переноса. Использование
drake.remove() в этих событиях позволяет корректно
обновлять состояние контейнера и предотвращать появление «пустых»
элементов.Контроль перемещений между контейнерами В
комбинации с опцией copy можно реализовать сценарии, где
элемент копируется при переносе, а исходный удаляется по логике
приложения. Это облегчает создание интерактивных интерфейсов типа «drag
& drop» с переносом между списками.
const drake = dragula([container1, container2]);
drake.on('drop', function(el, target, source, sibling) {
if (!target.classList.contains('allowed')) {
// Удаляем элемент, если он был сброшен в запрещённую область
drake.remove(el);
}
});
drake.on('cancel', function(el, container, source) {
// Удаляем элемент при отмене перетаскивания
drake.remove(el);
});
В этом примере:
cancel.drop
повторно. Это позволяет безопасно удалять элементы без риска
зациклить обработчики.drake.remove(el) элемент исчезает с экрана, что может
потребовать обновления внутреннего состояния приложения.copy: true необходимо различать оригинал и копию. Удаление
оригинала не влияет на копию, и наоборот.Ограничение перемещений Если определённые
элементы нельзя перемещать в конкретный контейнер,
drake.remove() позволяет отменить действие, не создавая
лишних проверок на уровне DOM.
Удаление временных элементов При динамическом создании элементов во время drag & drop, метод используется для мгновенного удаления неиспользуемых элементов.
Управление списками с удалением В интерфейсах типа «список задач» или «панель инструментов» метод позволяет удалять элементы при перетаскивании их в корзину или область удаления.
drake.cancel(): можно комбинировать с
drake.remove() для более гибкой логики отмены
перетаскивания.drake.destroy(): при уничтожении
экземпляра drake все элементы остаются в DOM, но метод
remove может быть вызван заранее для очистки.drake.containers: корректное
управление контейнерами важно для правильной работы remove,
особенно если элемент может быть удалён из любого из нескольких
контейнеров.remove, чтобы избежать ошибок.remove в сочетании с requestAnimationFrame для
оптимизации перерисовки.