|
54 | 54 | const menuX = ref(props.x || menuStore.menuX) |
55 | 55 | const menuY = ref(props.y || menuStore.menuY) |
56 | 56 |
|
| 57 | + const { pause: pauseDragListeners, resume: resumeDragListeners } = |
| 58 | + useEventListener( |
| 59 | + "mousemove", |
| 60 | + (e) => { |
| 61 | + if (!isDragging.value) return |
| 62 | + handleDrag(e) |
| 63 | + }, |
| 64 | + { passive: true }, |
| 65 | + ) |
| 66 | +
|
| 67 | + const { pause: pauseStopListeners, resume: resumeStopListeners } = |
| 68 | + useEventListener("mouseup", (e) => { |
| 69 | + if (!isDragging.value) return |
| 70 | + stopDrag(e) |
| 71 | + }) |
| 72 | +
|
| 73 | + useEventListener( |
| 74 | + "touchstart", |
| 75 | + (e) => { |
| 76 | + startDrag(e.touches[0]) |
| 77 | + e.preventDefault() |
| 78 | + }, |
| 79 | + { passive: false }, |
| 80 | + ) |
| 81 | +
|
| 82 | + useEventListener( |
| 83 | + "touchmove", |
| 84 | + (e) => { |
| 85 | + if (!isDragging.value) return |
| 86 | + handleDrag(e.touches[0]) |
| 87 | + e.preventDefault() |
| 88 | + }, |
| 89 | + { passive: false }, |
| 90 | + ) |
| 91 | +
|
| 92 | + useEventListener("touchend", (e) => { |
| 93 | + if (!isDragging.value) return |
| 94 | + stopDrag(e.changedTouches[0]) |
| 95 | + }) |
| 96 | +
|
57 | 97 | watch(show_menu, (newVal) => { |
58 | 98 | if (!newVal && isDragging.value) { |
59 | 99 | setTimeout(() => { |
|
75 | 115 | isDragging.value = true |
76 | 116 | dragStartX.value = e.clientX - menuX.value |
77 | 117 | dragStartY.value = e.clientY - menuY.value |
78 | | - document.addEventListener("mousemove", handleDrag) |
79 | | - document.addEventListener("mouseup", stopDrag) |
| 118 | + resumeDragListeners() |
| 119 | + resumeStopListeners() |
80 | 120 | e.preventDefault() |
81 | 121 | } |
82 | 122 |
|
|
97 | 137 |
|
98 | 138 | function stopDrag(e) { |
99 | 139 | isDragging.value = false |
100 | | - document.removeEventListener("mousemove", handleDrag) |
101 | | - document.removeEventListener("mouseup", stopDrag) |
| 140 | + pauseDragListeners() |
| 141 | + pauseStopListeners() |
102 | 142 | e.stopPropagation() |
103 | 143 | menuStore.setMenuPosition(menuX.value, menuY.value) |
104 | 144 | } |
|
134 | 174 | position: "absolute", |
135 | 175 | } |
136 | 176 | } |
137 | | -
|
138 | | - onUnmounted(() => { |
139 | | - document.removeEventListener("mousemove", handleDrag) |
140 | | - document.removeEventListener("mouseup", stopDrag) |
141 | | - }) |
142 | 177 | </script> |
143 | 178 |
|
144 | 179 | <style scoped> |
|
0 commit comments