VUE+element pover点击显示和点击空白区域隐藏
element
A Vue.js 2.0 UI Toolkit for Web
项目地址:https://gitcode.com/gh_mirrors/eleme/element
·
要做一个消息显示按钮,点击按钮之后消息框弹出。直接用element的pover做的,给data加一个pover:false,点击的时候修改为pover=!pover就可以点击按钮关闭和显示了。
后来又要做一个点击空白区域隐藏。
首先消息框弹出之后,点击空白隐藏,我第一时间想到的是点击这个消息之框之外的区域。
直接一个点击事件然后传e.target,然后再判断点击区域包不包含这个消息框。结果有问题,百度了一下代码如下。
首先要在mounted阶段绑定一个全局的点击事件监听
mounted(){
document.addEventListener('click',this.closePover)
}
接着写自己关闭方法
methods:{
closePover(e){
//传递事件源
let self = this
//判断当前消息框是否为显示状态以及点击区域是否为空白区域
if(this.pover && !this.$refs.pover.contains(e.target)){
this.pover = false
}
}
}
结果还是不行,后来看别人的代码,发现还在消息按钮的点击事件还写了@click.stop
这是按钮的HTML
<div class="msg" @click.stop="pover = !pover">
这是消息框的HTML
<div class="pover" v-show="pover" @click="closeMsg" ref="pover">
加了.stop会组织冒泡事件,但是为什么需要组织冒泡事件我也不是很清楚。
最后还要在destory阶段销毁事件监听
destroyed() {
document.addEventListener('click', this.closeMsg);
}
接下来是完整代码
<div class="msg" @click.stop="pover = !pover">
<el-badge :value="msgNum" class="item">
<img src="@/assets/myMessage.png" alt="" />
</el-badge>
</div>
<div class="pover" v-show="pover" @click="closeMsg" ref="pover">
//消息框内容
</div>
data(){
return {
pover:false
}
}
mounted() {
document.addEventListener('click', this.closeMsg);
},
method:{
closeMsg(e) {
let self = this;
if (self.pover === true && !this.$refs.pover.contains(e.target)) {
self.pover = false;
}
}
},
destroyed() {
document.addEventListener('click', this.closeMsg);
}
A Vue.js 2.0 UI Toolkit for Web
最近提交(Master分支:4 个月前 )
c345bb45
1 年前
a07f3a59
* Update transition.md
* Update table.md
* Update transition.md
* Update table.md
* Update transition.md
* Update table.md
* Update table.md
* Update transition.md
* Update popover.md 1 年前
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐


所有评论(0)