mirror of
https://github.com/element-plus/element-plus.git
synced 2026-03-13 07:51:17 +08:00
refactor(directives): [repeat-click] use addEventListener (#8784)
This commit is contained in:
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user