vue-hooks-plus
Version:
Vue hooks library
33 lines (32 loc) • 999 B
JavaScript
import { ref } from "vue";
import { getTargetElement } from "../utils/domTarget";
import useEffectWithTarget from "../utils/useEffectWithTarget";
function useEventListener(eventName, handler, options = {}) {
const handlerRef = ref(handler);
useEffectWithTarget(
() => {
const targetElement = getTargetElement(options.target, window);
if (!(targetElement == null ? void 0 : targetElement.addEventListener)) {
return;
}
const eventListener = (event) => {
return handlerRef.value(event);
};
targetElement.addEventListener(eventName, eventListener, {
capture: options.capture,
once: options.once,
passive: options.passive
});
return () => {
targetElement.removeEventListener(eventName, eventListener, {
capture: options.capture
});
};
},
[eventName, options.capture, options.once, options.passive],
options.target
);
}
export {
useEventListener as default
};