Skip to content

Instantly share code, notes, and snippets.

@manuelborst
Created August 2, 2021 16:05
Show Gist options
  • Save manuelborst/b317b406d3c308ce9499778d5f011af2 to your computer and use it in GitHub Desktop.
Save manuelborst/b317b406d3c308ce9499778d5f011af2 to your computer and use it in GitHub Desktop.
Drag and Drop JS
const empty = document.querySelectorAll(".empty");
const drag = document.querySelector(".drag");
drag.addEventListener("dragstart", dragStart);
drag.addEventListener("dragend", dragEnd);
// requestAnimationFrame - подменяет стиль на прозрачный. работает с частотой 60fps
function dragStart(event) {
console.log("start");
this.style.backgroundColor = "green";
requestAnimationFrame(() => (this.style.backgroundColor = "transparent"), 0);
}
function dragEnd() {
console.log("end");
this.style.backgroundColor = "red";
}
for (const item of empty) {
item.addEventListener("dragover", dragOver);
item.addEventListener("dragenter", dragEnter);
item.addEventListener("dragleave", dragLeave);
item.addEventListener("drop", dragDrop);
}
// dragOver срабатывает всё время
// preventDefault - обязательно! Сбрасывает стандартные обработчики браузера
function dragOver() {
event.preventDefault();
}
// dragEnter срабатывает над объектом один раз
function dragEnter() {
this.style.backgroundColor = "gray";
}
// dragLeave срабатывает после ухода
function dragLeave() {
this.style.backgroundColor = "black";
}
// drop срабатывает после того, как перетаскиваемый объект опустится на блок
function dragDrop() {
console.log("drop");
this.append(drag);
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment