Skip to content

useEventListener

在 mounted 时自动注册事件监听,unmounted 时自动移除,支持响应式目标。


函数签名

ts
// 省略 target 时默认监听 window
function useEventListener<E extends keyof WindowEventMap>(
  event: Arrayable<E>,
  listener: Arrayable<(this: Window, ev: WindowEventMap[E]) => any>,
  options?: MaybeRefOrGetter<boolean | AddEventListenerOptions>,
): Fn

// 指定 target(Window / Document / HTMLElement / EventTarget)
function useEventListener(
  target: MaybeRefOrGetter<EventTarget | null | undefined>,
  event: Arrayable<string>,
  listener: Arrayable<GeneralEventListener>,
  options?: MaybeRefOrGetter<boolean | AddEventListenerOptions>,
): Fn

基础用法

自动卸载

参数

参数说明类型默认值
target事件目标(ref / getter / Window / Document / HTMLElement)MaybeRefOrGetter<EventTarget>window
event事件名(支持数组绑定多个事件)Arrayable<string>
listener事件回调(支持数组绑定多个回调)Arrayable<Function>
optionsaddEventListener 配置项(支持响应式)MaybeRefOrGetter<boolean | AddEventListenerOptions>

返回值

返回清理函数 Fn,调用后立即移除所有已注册的事件监听。

特性

  • 组件卸载时自动移除监听
  • target 为 ref 时,元素变化会自动重新绑定
  • options 支持响应式,变化时自动重新注册
  • 省略 target 参数时默认绑定到 window

代码示例

ts
import { ref } from 'vue'
import { useEventListener } from 'ljf-hooks'

const btn = ref<HTMLElement>()

// 绑定到 ref 元素,组件卸载自动移除
const stop = useEventListener(btn, 'click', () => {
  console.log('点击了')
})

// 手动取消
stop()