当el-popover弹出框为手动激活时如何实现点击弹出框外的区域隐藏该弹出框
时间: 2023-07-20 07:14:30 浏览: 91
当el-popover弹出框为手动激活时,可以通过监听document的click事件,在事件处理函数中判断点击的区域是否在弹出框内,如果不在则隐藏弹出框。可以参考下面的代码实现:
```
<template>
<div ref="trigger" @click="showPopover">手动激活</div>
<el-popover
ref="popover"
title="标题"
content="这是一段内容"
:visible-arrow="false"
popper-class="my-popover">
<div @click.stop></div><!-- 这里添加一个空的div用于阻止点击事件冒泡 -->
</el-popover>
</template>
<script>
export default {
methods: {
showPopover() {
this.$refs.popover.showPopper() // 手动激活弹出框
// 监听document的click事件
document.addEventListener('click', this.handleClickOutside)
},
handleClickOutside(e) {
if (!this.$refs.popover.$el.contains(e.target) && !this.$refs.trigger.contains(e.target)) {
// 点击的区域不在弹出框内也不在触发器内,隐藏弹出框
this.$refs.popover.hidePopper()
// 移除document的click事件监听
document.removeEventListener('click', this.handleClickOutside)
}
}
}
}
</script>
```
在上面的代码中,我们通过`showPopover`方法手动激活弹出框,并在其中添加了一个监听document的click事件的代码。当点击document时,会触发`handleClickOutside`方法,其中`contains`方法用于判断点击的区域是否在弹出框内或触发器内,如果不在则隐藏弹出框并移除document的click事件监听。需要注意的是,为了防止点击事件冒泡到document,我们在弹出框内添加了一个空的div,并在其上添加了一个@click.stop事件处理函数。
阅读全文