42 lines
845 B
JavaScript
42 lines
845 B
JavaScript
![]() |
import { ref, onMounted, onUnmounted } from 'vue'
|
||
|
|
||
|
export default function useLongPress(callback = () => {}, ms = 500) {
|
||
|
const pressing = ref(false)
|
||
|
let timeoutId = null
|
||
|
|
||
|
const start = () => {
|
||
|
timeoutId = setTimeout(() => {
|
||
|
callback()
|
||
|
start()
|
||
|
}, ms)
|
||
|
}
|
||
|
|
||
|
const stop = () => {
|
||
|
if (timeoutId !== null) {
|
||
|
clearTimeout(timeoutId)
|
||
|
timeoutId = null
|
||
|
}
|
||
|
}
|
||
|
|
||
|
const onPressDown = () => {
|
||
|
pressing.value = true
|
||
|
start()
|
||
|
}
|
||
|
|
||
|
const onPressUp = () => {
|
||
|
pressing.value = false
|
||
|
stop()
|
||
|
}
|
||
|
|
||
|
onMounted(() => {
|
||
|
document.addEventListener('touchstart', onPressDown)
|
||
|
document.addEventListener('touchend', onPressUp)
|
||
|
})
|
||
|
|
||
|
onUnmounted(() => {
|
||
|
document.removeEventListener('touchstart', onPressDown)
|
||
|
document.removeEventListener('touchend', onPressUp)
|
||
|
})
|
||
|
|
||
|
return { pressing }
|
||
|
}
|