Skip to content

Instantly share code, notes, and snippets.

@jairusjoer
Created May 19, 2023 14:03
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save jairusjoer/673e5f0dc3497eb9699c75b669557e71 to your computer and use it in GitHub Desktop.
Save jairusjoer/673e5f0dc3497eb9699c75b669557e71 to your computer and use it in GitHub Desktop.
A super simple script to create draggable HTML elements
export const drag = (elements: NodeListOf<HTMLElement>) => {
let z = 0;
if (elements) {
for (const element of elements) {
let [adjustedX, adjustedY, currentX, currentY] = [0, 0, 0, 0];
let moved = false;
const dragMouseUp = (event: MouseEvent) => {
document.onmousemove = null;
document.onmouseup = null;
};
const dragMouseMove = (event: MouseEvent) => {
moved = true;
adjustedX = currentX - event.clientX;
adjustedY = currentY - event.clientY;
element.style.top = `${element.offsetTop - adjustedY}px`;
element.style.left = `${element.offsetLeft - adjustedX}px`;
currentX = event.clientX;
currentY = event.clientY;
};
const dragMouseDown = (event: MouseEvent) => {
currentX = event.clientX;
currentY = event.clientY;
element.draggable = false;
element.style.zIndex = `${z++}`;
document.onmousemove = dragMouseMove;
document.onmouseup = dragMouseUp;
};
element.onclick = (event: MouseEvent) => {
if (moved) event.preventDefault();
moved = false;
}
element.onmousedown = dragMouseDown;
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment