溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

詳解Vue如何實現顯示/隱藏層

發布時間:2020-07-20 16:49:14 來源:億速云 閱讀:297 作者:小豬 欄目:web開發

小編這次要給大家分享的是詳解Vue如何實現顯示/隱藏層,文章內容豐富,感興趣的小伙伴可以來了解一下,希望大家閱讀完這篇文章之后能夠有所收獲。

問題描述:

一個Icon點擊出現菜單,點擊菜單區域外任何區域菜單收起。
何為優雅的去解決上述問題?

  • 盡可能的采用vue來解決問題
  • 盡可能少的與原生對象發生交互
  • 代碼干凈、易懂

問題解決思路:

  • 通過Vue的v-show指令決定菜單的顯示、隱藏。
  • 通過Document的全局點擊事件判斷是否該收起
  • 需要優雅的解決幾個問題:
  • 禁止點擊事件冒泡。采用VUE的@click.stop來解決問題,請參考下方代碼
  • 優雅且安全的移除全局事件監聽(只有菜單彈出的時候才去監聽)

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如何實現顯示/隱藏層的文章,如果覺得文章內容寫得不錯的話,可以把它分享出去給更多人看到。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女