小编这次要给大家分享的是详解Vue如何实现显示/隐藏层,文章内容丰富,感兴趣的小伙伴可以来了解一下,希望大家阅读完这篇文章之后能够有所收获。
问题描述:
一个Icon点击出现菜单,点击菜单区域外任何区域菜单收起。
何为优雅的去解决上述问题?
问题解决思路:
document的事件添加
HTML
<template>
<div class="dir">
<!-- 按钮,特别注意@click.stop用于禁止消息冒泡 -->
<span title="排序" id="sort_by" @click.stop="onSortClick()" class="icons">按钮</span><br/>
<!-- 菜单 v-show设置变量 showSortmenu,style的内容要一开始就写上!
此处不确定是否是个BUG,不初始style时显示不正确
-->
<ul class="menu" id="sort_by_menu" v-show="showSortmenu" >
<li sort="title">
<span>标题</span>
</li>
<li sort="lastModify">
<span>最后修改时间</span>
</li>
<li sort="free">
<span>自定义排序</span>
</li>
</ul>
</div>
</template>
JavaScript
<script>
export default {
name: "demo2",
data() {
return {
showSortmenu: false
};
},
props: {},
methods: {
//接收按钮点击事件@click.stop,禁止冒泡
onSortClick: function() {
//设置bool值,
this.showSortmenu = !this.showSortmenu;
//要特别注意这里,只有菜单显示的时候才会监听全局点击事件
//并且,要设置为:vue的方法,不能扔到export代码段外面去。
//要切记`this`这个变量对应的实例是谁
if (this.showSortmenu) {
document.addEventListener("click", this.onGlobalClick);
}
},
//全局监听点击事件
onGlobalClick(e) {
//判断全局被点中的控件的className,不同就是菜单外点击
if (e.target.className != "sort_by_menu") {
this.showSortmenu = false;
//这里要注意啊!!!!一定要记得移除监听事件!!!!!
document.removeEventListener("click", this.onGlobalClick);
}
}
},
mounted() {},
};
</script>
看完这篇关于详解Vue如何实现显示/隐藏层的文章,如果觉得文章内容写得不错的话,可以把它分享出去给更多人看到。
亿速云「云服务器」,即开即用、新一代英特尔至强铂金CPU、三副本存储NVMe SSD云盘,价格低至29元/月。点击查看>>
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。