在Vue 3的世界里,组合式API如同一股清新的风潮,引领我们走向更加模块化、可维护的编程境界。其中,ref
、onMounted
和onUnmounted
等组合式API更是我们的得力助手。今天,我要为大家揭秘一个实用的工具函数——onClickOutside
,它能够让你在点击目标元素外部时,触发特定的回调函数。
onClickOutside
函数的核心在于利用Vue3的组合式API,通过ref
来获取DOM元素的引用,并在组件挂载时添加点击事件监听,在组件卸载时移除监听。这样可以确保只有在目标元素存在且被点击时,才会触发回调函数。
import { Ref, onMounted, onUnmounted } from 'vue';
export function onClickOutside(targetRef: Ref<HTMLElement | null>, callback: (event: MouseEvent) => void) {
const listener = (event: MouseEvent) => {
const target = targetRef.value;
if (!target || !event.target) return;
if (!target.contains(event.target as Node)) {
callback(event);
}
};
onMounted(() => {
document.addEventListener('click', listener, { capture: true });
});
onUnmounted(() => {
document.removeEventListener('click', listener, { capture: true });
});
}
下面是一个简单的使用示例,展示了如何在Vue 3组件中使用onClickOutside
函数:
<template>
<div v-if="isOpen" ref="target" class="modal">
点击外部区域关闭我
</div>
</template>
<script setup lang="ts">
import { ref } from 'vue';
import { onClickOutside } from './onClickOutside';
const target = ref<HTMLElement | null>(null);
const isOpen = ref(true);
onClickOutside(target, () => {
isOpen.value = false;
});
</script>
在这个示例中,当点击模态框外部区域时,isOpen
状态会被设置为false
,从而关闭模态框。
capture: true
确保在捕获阶段监听事件,这样即使其他事件调用了stopPropagation()
,也能触发回调函数。HTMLElement
和事件对象类型,提高代码的可读性和可维护性。onUnmounted
自动清理事件监听,避免内存泄漏。targetRef.value
)和事件目标是否存在(event.target
),确保逻辑的正确性。contains()
方法判断点击目标是否在监听元素内部。如果你需要实现更复杂的功能,可以考虑以下特性:
mousedown
)。immediate
选项。通过这些扩展功能,你可以更加灵活地控制onClickOutside
的行为,满足不同的业务需求。
声明:
1、本博客不从事任何主机及服务器租赁业务,不参与任何交易,也绝非中介。博客内容仅记录博主个人感兴趣的服务器测评结果及一些服务器相关的优惠活动,信息均摘自网络或来自服务商主动提供;所以对本博客提及的内容不作直接、间接、法定、约定的保证,博客内容也不具备任何参考价值及引导作用,访问者需自行甄别。
2、访问本博客请务必遵守有关互联网的相关法律、规定与规则;不能利用本博客所提及的内容从事任何违法、违规操作;否则造成的一切后果由访问者自行承担。
3、未成年人及不能独立承担法律责任的个人及群体请勿访问本博客。
4、一旦您访问本博客,即表示您已经知晓并接受了以上声明通告。
本站资源仅供个人学习交流,请于下载后24小时内删除,不允许用于商业用途,否则法律问题自行承担。
Copyright 2005-2024 yuanmayuan.com 【源码园】 版权所有 备案信息
声明: 本站非腾讯QQ官方网站 所有软件和文章来自互联网 如有异议 请与本站联系 本站为非赢利性网站 不接受任何赞助和广告