element-plus/packages/directives/repeat-click/index.ts
三咲智子 6503e55277
refactor(utils): migrate utils (#5949)
* refactor(utils-v2): migrate utils

* refactor(utils-v2): migrate utils

* refactor(utils-v2): migrate utils

* refactor(utils): remove

* refactor(utils): rename

* refactor(utils): move EVENT_CODE to constants

* refactor: remove generic
2022-02-11 11:03:15 +08:00

27 lines
717 B
TypeScript

import { on, once } from '@element-plus/utils'
import type { ObjectDirective, DirectiveBinding } from 'vue'
export default {
beforeMount(el: HTMLElement, binding: DirectiveBinding) {
let interval = null
let startTime: number
const handler = () => binding.value && binding.value()
const clear = () => {
if (Date.now() - startTime < 100) {
handler()
}
clearInterval(interval)
interval = null
}
on(el, 'mousedown', (e: MouseEvent) => {
if ((e as any).button !== 0) return
startTime = Date.now()
once(document as any, 'mouseup', clear)
clearInterval(interval)
interval = setInterval(handler, 100)
})
},
} as ObjectDirective