赞
踩
Vue3组件开发——点击按钮外部触发弹窗事件
vscode
TS
“bootstrap”: “^5.1.3”,
“core-js”: “^3.6.5”,
“vue”: “^3.0.0”,
“vue-class-component”: “^8.0.0-0”
useOutclick.TS
import { ref, onMounted, onUnmounted, Ref } from 'vue' const useClickOutside = (elementRef: Ref<null | HTMLElement>) => { const isClickOutside = ref(false) const handler = (e:MouseEvent) => { if (elementRef.value) { if (elementRef.value.contains(e.target as HTMLElement)) { isClickOutside.value = false } else { isClickOutside.value = true } } } onMounted(() => { document.addEventListener('click', handler) }) onUnmounted(() => { document.removeEventListener('click', handler) }) return isClickOutside } export default useClickOutside
需要解决判断点击的是哪一个部分
就涉及到关于Vue虚拟DOM、树、节点的内容了。
浏览器工作原理:
浏览器是通过监控整个由DOM节点构成的树来监听整个页面的。
if (elementRef.value.contains(e.target as HTMLElement)) {
isClickOutside.value = false
} else {
isClickOutside.value = true
}
判断元素是不是点击的DOM节点。然后给导出的ref变量赋值,做点击判断的target。
点击前:
点击后:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。