@@ -77,23 +77,59 @@ const makeButtonsWork = (panel) => {
7777const 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