website/random/maniacs/assets/scripts/drag.js
2024-04-22 03:13:17 -05:00

85 lines
2.2 KiB
JavaScript

/* This script was originally found on Stack Overflow
*
* https://stackoverflow.com/a/63425707
*
* Modified by me, G2.
*/
function filter(e) {
if (e.button != 0) {
return;
}
// Find the element that was clicked on, and the parent of that element
let target = e.target;
let parent = target.parentElement;
if (target.classList.contains("app")) {
taskbarAppClicked(target, zIndex);
return;
}
if (parent == null) {
return;
}
let mainWindow = parent.closest('.window');
if (mainWindow == null) {
return;
}
// Move windows to front if clicked, this solution isn't great but it does work.
moveToFront(mainWindow);
if (!target.classList.contains("draggable") | mainWindow.classList.contains("maximized")) {
return;
}
target.style.cursor = "url(assets/images/cursors/windows7_move.webp) 11 12, auto";
parent.moving = true;
if (e.clientX) {
parent.oldX = e.clientX; // If they exist then use Mouse input
parent.oldY = e.clientY;
} else {
parent.oldX = e.touches[0].clientX; // Otherwise use touch input
parent.oldY = e.touches[0].clientY;
}
parent.oldLeft = window.getComputedStyle(parent).getPropertyValue('left').split('px')[0] * 1;
parent.oldTop = window.getComputedStyle(parent).getPropertyValue('top').split('px')[0] * 1;
document.onmousemove = dr;
document.ontouchmove = dr;
function dr(event) {
event.preventDefault();
if (!parent.moving) {
return;
}
if (event.clientX) {
parent.distX = event.clientX - parent.oldX;
parent.distY = event.clientY - parent.oldY;
} else {
parent.distX = event.touches[0].clientX - parent.oldX;
parent.distY = event.touches[0].clientY - parent.oldY;
}
parent.style.left = parent.oldLeft + parent.distX + "px";
parent.style.top = parent.oldTop + parent.distY + "px";
}
function endDrag() {
target.style.cursor = "url(assets/images/cursors/windows7_arrow.webp), auto";
parent.moving = false;
}
parent.onmouseup = endDrag;
parent.ontouchend = endDrag;
}
document.onmousedown = filter;
document.ontouchstart = filter;