Skip to content

Commit 366a977

Browse files
committed
Add easing to explorePanel dragging
1 parent 1735d71 commit 366a977

File tree

2 files changed

+46
-10
lines changed

2 files changed

+46
-10
lines changed

src/cms/server/public/app.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { query, setIframeSrc } from './common.js'
1+
import { setIframeSrc } from './common.js'
22

33
window.addEventListener('DOMContentLoaded', () => {
44
setIframeSrc()

src/cms/server/public/app/explorePanel.js

Lines changed: 45 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -77,23 +77,59 @@ const makeButtonsWork = (panel) => {
7777
const makeDraggable = (element) => {
7878
let offsetX = 0
7979
let offsetY = 0
80+
let targetX = 0
81+
let targetY = 0
82+
let currentX = 0
83+
let currentY = 0
84+
let animationId = null
85+
let isDragging = false
86+
const easing = 0.125
87+
88+
const animate = () => {
89+
currentX += (targetX - currentX) * easing
90+
currentY += (targetY - currentY) * easing
91+
element.style.left = currentX + 'px'
92+
element.style.top = currentY + 'px'
93+
94+
if (!isDragging) {
95+
const distance = Math.abs(targetX - currentX) + Math.abs(targetY - currentY)
96+
if (distance < 0.1) {
97+
animationId = null
98+
return
99+
}
100+
}
101+
102+
animationId = requestAnimationFrame(animate)
103+
}
104+
105+
element.addEventListener('pointerdown', (e) => {
106+
if (e.target !== element && e.target.closest('button, input, a')) {
107+
return
108+
}
109+
110+
isDragging = true
111+
112+
if (!animationId) {
113+
animationId = requestAnimationFrame(animate)
114+
}
80115

81-
element.addEventListener('mousedown', (e) => {
82-
offsetX = e.clientX - element.offsetLeft
83-
offsetY = e.clientY - element.offsetTop
116+
offsetX = e.clientX - currentX
117+
offsetY = e.clientY - currentY
118+
element.setPointerCapture(e.pointerId)
84119

85120
const move = (e) => {
86-
element.style.left = (e.clientX - offsetX) + 'px'
87-
element.style.top = (e.clientY - offsetY) + 'px'
121+
targetX = e.clientX - offsetX
122+
targetY = e.clientY - offsetY
88123
}
89124

90125
const stop = () => {
91-
document.removeEventListener('mousemove', move)
92-
document.removeEventListener('mouseup', stop)
126+
element.removeEventListener('pointermove', move)
127+
element.removeEventListener('pointerup', stop)
128+
isDragging = false
93129
}
94130

95-
document.addEventListener('mousemove', move)
96-
document.addEventListener('mouseup', stop)
131+
element.addEventListener('pointermove', move)
132+
element.addEventListener('pointerup', stop)
97133
})
98134
}
99135

0 commit comments

Comments
 (0)