-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathscript3.js
More file actions
64 lines (53 loc) · 1.77 KB
/
Copy pathscript3.js
File metadata and controls
64 lines (53 loc) · 1.77 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
document.addEventListener("DOMContentLoaded", () => {
const draggables = document.querySelectorAll(".draggable");
const rangeChart = document.getElementById("range-chart");
draggables.forEach((draggable) => {
draggable.addEventListener("dragstart", dragStart);
draggable.addEventListener("dragend", dragEnd);
});
rangeChart.addEventListener("dragover", dragOver);
rangeChart.addEventListener("drop", drop);
function dragStart(e) {
e.dataTransfer.setData("text/plain", e.target.id);
setTimeout(() => {
e.target.style.display = "none";
}, 0);
}
function dragEnd(e) {
e.target.style.display = "block";
}
function dragOver(e) {
e.preventDefault();
}
function drop(e) {
e.preventDefault();
const id = e.dataTransfer.getData("text/plain");
const draggable = document.getElementById(id);
const dropZone = e.target;
if (dropZone === rangeChart || dropZone.classList.contains("range-label")) {
rangeChart.appendChild(draggable);
draggable.style.position = "absolute";
draggable.style.left = `${
e.clientX - rangeChart.offsetLeft - draggable.offsetWidth / 2
}px`;
draggable.style.top = `${
e.clientY - rangeChart.offsetTop - draggable.offsetHeight / 2
}px`;
draggable.addEventListener("mousedown", initResize);
}
}
function initResize(e) {
window.addEventListener("mousemove", resize);
window.addEventListener("mouseup", stopResize);
function resize(e) {
const draggable = e.target;
const newWidth = e.clientX - draggable.getBoundingClientRect().left;
if (newWidth > 50) {
draggable.style.width = `${newWidth}px`;
}
}
function stopResize() {
window.removeEventListener("mousemove", resize);
}
}
});