const useEventListener = (...args:any[])=>{
let target:HTMLElement | undefined |null | Window
let events:string[] |string
let listeners:any
let options : EventListenerOptions | undefined
// 清除监听
const cleanFns = []
if(typeof args[0] === 'string' || Array.isArray(args[0])){
[events,listeners,options] = args
target = window
}else{
[target,events,listeners,options] = args
}
if(typeof events === 'string'){
events = [events]
}
if(!Array.isArray(listeners)){
listeners = [listeners]
}
//注册
const register = (el:any,event:string,listener:any,options:any)=>{
console.log(el)
el?.addEventListener(event,listener,options)
//retur清除
return ()=> el?.removeEventListener(event,listener,options)
}
//清除
const clear = ()=>{
cleanFns.forEach((fn)=>{
fn()
})
cleanFns.length = 0
}
//监听
//如果想在侦听器回调中能访问被 Vue 更新之后的DOM,你需要指明 flush: 'post' 选项
const stopWatch = watch([target
vue3实现事件监听的hook
于 2024-08-02 10:48:00 首次发布


836

被折叠的 条评论
为什么被折叠?



