前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >vue 菜单实现

vue 菜单实现

作者头像
tianyawhl
发布2022-03-24 10:59:31
6390
发布2022-03-24 10:59:31
举报
文章被收录于专栏:前端之攻略

主要实现鼠标移到主菜单,另一个div显示子菜单,采用mouseenter和mouseleave结合,不要使用mouseout,因为mouseout在大div中有子元素,在子元素也会触发mouseout

代码语言:javascript
复制
<template>
  <div>
    <ul class="mainMenu">
      <li 
      :class="['mainMenu-item',{activeMain:curMainIndex===index}]" 
      v-for="(item,index) in this.menuData" 
      :key="index" 
      @click="go(item)" 
      @mouseenter="handelMouseEnter(index)" 
      @mouseleave="handelMouseleave" >
      {{item.menuName}}<i v-if="item.childMenu && item.childMenu.length>0" class="el-icon-arrow-down"></i>
      </li>
    </ul>
    <div ref="submenuWrap" class="submenuWrap" v-show="isShow" style="" @mouseenter="handelSubMouseEnter" @mouseleave="handelSubMouseleave">
      <ul class="subMenu">
        <li class="subMenu-item" v-for="(submenu,subindex) in submenu" :key="subindex">
          <!-- <div v-if="submenu.childMenu && submenu.childMenu.length>0">{{submenu.menuName}}</div> -->
          <!-- <div v-if="!submenu.childMenu || submenu.childMenu.length==0" @click="go(submenu)">{{submenu.menuName}}</div> -->
          <div @click="go(submenu)">{{submenu.menuName}}</div>
          <ul v-if="submenu.childMenu && submenu.childMenu.length>0">
            <li 
            v-for="(innerSubmenu,innerSubindex) in submenu.childMenu" 
            :key="innerSubindex"  
            @click="go(innerSubmenu)">
            <div>{{innerSubmenu.menuName}}</div>
            </li>
          </ul>
        </li>
      </ul>
    </div>
    <div style="height:150px;">content</div>
  </div>
</template>
代码语言:javascript
复制
  data() {
    return {
      curMainIndex:"",
      timer:null,
      isShow:false,
      submenu:"",
      menuData: [],
代码语言:javascript
复制
    go(submenu){
      if(!submenu.childMenu || submenu.childMenu.length==0){
         alert(submenu.menuName)
      }
    },
    clickSub(){
       alert("hi")
    },
    handelSubMouseleave(){
      console.log("leave sub")
      this.isShow = false
    },
    handelSubMouseEnter(){
      clearTimeout(this.timer)
      console.log("enter sub")
      // this.isShow = true
    },
    handelMouseEnter(index){
      this.curMainIndex = index
      clearTimeout(this.timer)
      
      this.submenu = this.menuData[index].childMenu
      
      if(this.submenu){
        this.isShow = true
      }else{
        this.isShow = false
      }
    },
    handelMouseleave(){
      this.curMainIndex = ""
      this.timer = setTimeout(()=>{
         this.isShow = false
      },500)
      
    },
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022/02/13 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档