refactor(directives): [repeat-click] use addEventListener (#8784)

This commit is contained in:
zz
2022-07-21 18:15:57 +08:00
committed by GitHub
parent 9f5be85a48
commit 6837b22841

View File

@@ -1,17 +1,14 @@
// @ts-nocheck
import { on, once } from '@element-plus/utils'
import type { DirectiveBinding, ObjectDirective } from 'vue'
export default {
const RepeatClick: ObjectDirective = {
beforeMount(el: HTMLElement, binding: DirectiveBinding) {
let interval = null
let interval: ReturnType<typeof setInterval> | null = null
let isHandlerCalled = false
const handler = () => binding.value && binding.value()
const clear = () => {
clearInterval(interval)
clearInterval(interval!)
interval = null
if (!isHandlerCalled) {
@@ -20,16 +17,18 @@ export default {
isHandlerCalled = false
}
on(el, 'mousedown', (e: MouseEvent) => {
if ((e as any).button !== 0) return
el.addEventListener('mousedown', (e: MouseEvent) => {
if (e.button !== 0) return
once(document as any, 'mouseup', clear)
document.addEventListener('mouseup', clear, { once: true })
clearInterval(interval)
clearInterval(interval!)
interval = setInterval(() => {
isHandlerCalled = true
handler()
}, 100)
})
},
} as ObjectDirective
}
export default RepeatClick