Vue 實(shí)現(xiàn)顯示/隱藏層的思路(加全局點(diǎn)擊事件)
問題描述:
一個(gè)Icon點(diǎn)擊出現(xiàn)菜單,點(diǎn)擊菜單區(qū)域外任何區(qū)域菜單收起。
何為優(yōu)雅的去解決上述問題?
- 盡可能的采用vue來解決問題
- 盡可能少的與原生對象發(fā)生交互
- 代碼干凈、易懂
問題解決思路:
- 通過Vue的v-show指令決定菜單的顯示、隱藏。
- 通過Document的全局點(diǎn)擊事件判斷是否該收起
- 需要優(yōu)雅的解決幾個(gè)問題:
- 禁止點(diǎn)擊事件冒泡。采用VUE的@click.stop來解決問題,請參考下方代碼
- 優(yōu)雅且安全的移除全局事件監(jiān)聽(只有菜單彈出的時(shí)候才去監(jiān)聽)
document的事件添加
HTML
<template> <div class="dir"> <!-- 按鈕,特別注意@click.stop用于禁止消息冒泡 --> <span title="排序" id="sort_by" @click.stop="onSortClick()" class="icons">按鈕</span><br/> <!-- 菜單 v-show設(shè)置變量 showSortmenu,style的內(nèi)容要一開始就寫上! 此處不確定是否是個(gè)BUG,不初始style時(shí)顯示不正確 --> <ul class="menu" id="sort_by_menu" v-show="showSortmenu" style="display: block;"> <li sort="title"> <span>標(biāo)題</span> </li> <li sort="lastModify"> <span>最后修改時(shí)間</span> </li> <li sort="free"> <span>自定義排序</span> </li> </ul> </div> </template>
JavaScript
<script> export default { name: "demo2", data() { return { showSortmenu: false }; }, props: {}, methods: { //接收按鈕點(diǎn)擊事件@click.stop,禁止冒泡 onSortClick: function() { //設(shè)置bool值, this.showSortmenu = !this.showSortmenu; //要特別注意這里,只有菜單顯示的時(shí)候才會監(jiān)聽全局點(diǎn)擊事件 //并且,要設(shè)置為:vue的方法,不能扔到export代碼段外面去。 //要切記`this`這個(gè)變量對應(yīng)的實(shí)例是誰 if (this.showSortmenu) { document.addEventListener("click", this.onGlobalClick); } }, //全局監(jiān)聽點(diǎn)擊事件 onGlobalClick(e) { //判斷全局被點(diǎn)中的控件的className,不同就是菜單外點(diǎn)擊 if (e.target.className != "sort_by_menu") { this.showSortmenu = false; //這里要注意啊!!!!一定要記得移除監(jiān)聽事件?。。。。? document.removeEventListener("click", this.onGlobalClick); } } }, mounted() {}, }; </script>
總結(jié)
以上所述是小編給大家介紹的Vue 實(shí)現(xiàn)顯示/隱藏層的思路(加全局點(diǎn)擊事件),希望對大家有所幫助!
- vueJS簡單的點(diǎn)擊顯示與隱藏的效果【實(shí)現(xiàn)代碼】
- vue實(shí)現(xiàn)點(diǎn)擊隱藏與顯示實(shí)例分享
- vue 點(diǎn)擊展開顯示更多(點(diǎn)擊收起部分隱藏)
- vue組件實(shí)現(xiàn)彈出框點(diǎn)擊顯示隱藏效果
- Vue實(shí)現(xiàn) 點(diǎn)擊顯示再點(diǎn)擊隱藏效果(點(diǎn)擊頁面空白區(qū)域也隱藏效果)
- Vue.js 點(diǎn)擊按鈕顯示/隱藏內(nèi)容的實(shí)例代碼
- vue實(shí)現(xiàn)點(diǎn)擊某個(gè)div顯示與隱藏內(nèi)容功能實(shí)例
相關(guān)文章
解決vue router使用 history 模式刷新后404問題
這篇文章主要介紹了解決vue router使用 history 模式刷新后404問題,需要的朋友可以參考下2017-07-07Element-UI?el-table對循環(huán)產(chǎn)生的空白列賦默認(rèn)值方式
這篇文章主要介紹了Element-UI?el-table對循環(huán)產(chǎn)生的空白列賦默認(rèn)值方式,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-03-03Vue?3?使用moment設(shè)置顯示時(shí)間格式的問題及解決方法
在Vue?3中,因?yàn)檫^濾器(filter)已經(jīng)被廢棄,取而代之的是全局方法(global?method),本文給大家介紹Vue?3?使用moment設(shè)置顯示時(shí)間格式的問題及解決方法,感興趣的朋友一起看看吧2023-12-12vue自動(dòng)路由-單頁面項(xiàng)目(非build時(shí)構(gòu)建)
這篇文章主要介紹了vue自動(dòng)路由-單頁面項(xiàng)目(非build時(shí)構(gòu)建),本文通過實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-04-04