Vue 實現(xiàn)顯示/隱藏層的思路(加全局點擊事件)
更新時間:2019年12月31日 11:27:13 作者:smokelee
這篇文章主要介紹了Vue 實現(xiàn)顯示/隱藏層的思路(加全局點擊事件),本文給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下
問題描述:
一個Icon點擊出現(xiàn)菜單,點擊菜單區(qū)域外任何區(qū)域菜單收起。
何為優(yōu)雅的去解決上述問題?
- 盡可能的采用vue來解決問題
- 盡可能少的與原生對象發(fā)生交互
- 代碼干凈、易懂
問題解決思路:
- 通過Vue的v-show指令決定菜單的顯示、隱藏。
- 通過Document的全局點擊事件判斷是否該收起
- 需要優(yōu)雅的解決幾個問題:
- 禁止點擊事件冒泡。采用VUE的@click.stop來解決問題,請參考下方代碼
- 優(yōu)雅且安全的移除全局事件監(jiān)聽(只有菜單彈出的時候才去監(jiān)聽)
document的事件添加
HTML
<template>
<div class="dir">
<!-- 按鈕,特別注意@click.stop用于禁止消息冒泡 -->
<span title="排序" id="sort_by" @click.stop="onSortClick()" class="icons">按鈕</span><br/>
<!-- 菜單 v-show設置變量 showSortmenu,style的內(nèi)容要一開始就寫上!
此處不確定是否是個BUG,不初始style時顯示不正確
-->
<ul class="menu" id="sort_by_menu" v-show="showSortmenu" style="display: block;">
<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;
//要特別注意這里,只有菜單顯示的時候才會監(jiān)聽全局點擊事件
//并且,要設置為:vue的方法,不能扔到export代碼段外面去。
//要切記`this`這個變量對應的實例是誰
if (this.showSortmenu) {
document.addEventListener("click", this.onGlobalClick);
}
},
//全局監(jiān)聽點擊事件
onGlobalClick(e) {
//判斷全局被點中的控件的className,不同就是菜單外點擊
if (e.target.className != "sort_by_menu") {
this.showSortmenu = false;
//這里要注意啊!!!!一定要記得移除監(jiān)聽事件?。。。?!
document.removeEventListener("click", this.onGlobalClick);
}
}
},
mounted() {},
};
</script>
總結(jié)
以上所述是小編給大家介紹的Vue 實現(xiàn)顯示/隱藏層的思路(加全局點擊事件),希望對大家有所幫助!
相關文章
vue3+ElementPlus+VueCropper實現(xiàn)上傳圖片功能
文章介紹了如何在Vue3、ElementPlus和VueCropper組件中實現(xiàn)圖片上傳和裁剪功能,包括放大、縮小等操作,感興趣的朋友跟隨小編一起看看吧2025-01-01
Vue-cli項目獲取本地json文件數(shù)據(jù)的實例
下面小編就為大家分享一篇Vue-cli項目獲取本地json文件數(shù)據(jù)的實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-03-03
element input輸入框自動獲取焦點的實現(xiàn)
本文主要介紹了element input輸入框自動獲取焦點的實現(xiàn),文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2021-10-10
vue3.0?router路由跳轉(zhuǎn)傳參問題(router.push)
這篇文章主要介紹了vue3.0?router路由跳轉(zhuǎn)傳參問題(router.push),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-02-02

