使用Vue实现一个当鼠标悬浮时出现,鼠标离开时消失的双层菜单

这篇具有很好参考价值的文章主要介绍了使用Vue实现一个当鼠标悬浮时出现,鼠标离开时消失的双层菜单。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言

分享一个基于Vue实现一个当鼠标悬浮时出现,鼠标离开时消失的双层菜单。同时也是为了以后需要类似的需求时,可以提供一个实现思路,以及可以快速ctrl+c和ctrl+v操作,提高工作效率~

一、示例代码

(1)/src/views/Example/DiyNavMenu/index.vue

<template>
  <div class="index">
    <ul>
      <li
        v-for="(item, index) in tabList"
        :key="index"
        :class="{ 'active-tab': index == activeTabIndex }"
        @mouseover="
          item.name == '项目管理'
            ? (item.isVisibleMenuBox = true)
            : (item.isVisibleMenuBox = false)
        "
        @mouseleave="
          item.isVisibleMenuBox = false;
          isVisibleSubMenuBox = false;
          isMenuHover = -1;
        "
      >
        <span class="tab-label">{{ item.name }}</span>

        <div class="menu" v-show="item.isVisibleMenuBox">
          <div class="menu-box">
            <div class="menu-box-cascader">
              <div
                class="menu-item"
                v-for="(menuItem, menuIndex) in menuList"
                :key="menuIndex"
                :class="{ 'menu-hover': menuIndex == isMenuHover }"
                @mouseover="handleMenuMouseOver(menuItem, menuIndex)"
              >
                <span>{{ menuItem.label }}</span>
                <i class="el-icon-arrow-right" />
              </div>
            </div>

            <div class="menu-box-cascader" v-show="isVisibleSubMenuBox">
              <div
                class="menu-item"
                v-for="(subMenuItem, subMenuIndex) in subMenuList"
                :key="subMenuIndex"
                @click="handleSubMenuClick(subMenuItem, subMenuIndex)"
              >
                <span>{{ subMenuItem.label }}</span>
              </div>
            </div>
          </div>
        </div>
      </li>
    </ul>
  </div>
</template>

<script>
export default {
  data: () => ({
    // 默认激活的页签索引
    activeTabIndex: 1,
    // 页签列表
    tabList: [
      {
        name: '系统中心',
        isVisibleMenuBox: false,
      },
      {
        name: '项目管理',
        isVisibleMenuBox: false,
      },
      {
        name: '用户管理',
        isVisibleMenuBox: false,
      },
    ],
    // 菜单列表
    menuList: [
      {
        label: '卡拉OK项目工程',
        children: [
          {
            label: '卡拉一期',
          },
          {
            label: '卡拉二期',
          },
          {
            label: '卡拉三期',
          },
          {
            label: '卡拉四期',
          },
          {
            label: '卡拉五期',
          },
        ],
      },
      {
        label: '芭比Q项目工程',
        children: [
          {
            label: '芭比一期',
          },
          {
            label: '芭比二期',
          },
        ],
      },
      {
        label: '最流批的项目工程',
        children: [
          {
            label: '最流批一期',
          },
        ],
      },
    ],
    // 菜单索引
    isMenuHover: -1,
    // 子菜单是否可见
    isVisibleSubMenuBox: false,
    // 子菜单列表
    subMenuList: [],
  }),
  methods: {
    /**
     * 菜单鼠标悬浮事件
     */
    handleMenuMouseOver(menuItem, menuIndex) {
      this.isMenuHover = menuIndex
      if (menuItem.children) {
        this.isVisibleSubMenuBox = true
        this.subMenuList = menuItem.children
      }
    },

    /**
     * 子菜单点击事件
     */
    handleSubMenuClick(subMenuItem, subMenuIndex) {
      console.log('handleSubMenuClick ->', subMenuItem, subMenuIndex)
    },
  },
};
</script>

<style lang="less" scoped>
.index {
  width: 100%;
  height: 35px;
  display: flex;
  justify-content: center;
  background-color: #fff;
  border-bottom: 1px solid #eee;

  ul {
    min-width: 300px;
    height: 100%;
    display: flex;
    justify-content: space-between;

    li {
      height: 100%;
      display: flex;
      align-items: center;
      justify-content: center;
      list-style: none;
      position: relative;

      .tab-label {
        padding: 0px 10px;
        font-size: 14px;
        line-height: 34px;
        border-bottom: 1px solid transparent;
      }

      .tab-label:hover {
        border-bottom: 1px solid #072fbe;
        cursor: pointer;
        color: #072fbe;
      }

      .menu {
        position: absolute;
        top: 35px;
        left: 0;
        z-index: 10;
        width: 150px;
        height: auto;
        background-color: #fff;

        .menu-box {
          position: relative;
          display: flex;
          width: 100%;
          height: auto;

          .menu-box-cascader {
            width: 100%;
            height: 200px;
            background-color: #fff;
            border-radius: 5px;
            box-shadow: 1px 2px 8px 0 rgba(0, 0, 0, 0.15);

            &:nth-of-type(2) {
              position: absolute;
              top: 0;
              left: 152px;
              width: 180px;
              // background-color: #faf;
            }

            .menu-item {
              position: relative;
              width: 100%;
              height: 28px;
              display: flex;
              align-items: center;
              justify-content: center;
              cursor: pointer;

              span {
                font-size: 13px;
              }

              .el-icon-arrow-right {
                font-size: 12px;
                position: absolute;
                right: 2px;
              }

              &:hover {
                background-color: #072fbe1a;

                span, .el-icon-arrow-right {
                  color: #072fbe;
                }
              }
            }

            .menu-hover {
              background-color: #072fbe1a;

              span, .el-icon-arrow-right {
                color: #072fbe;
              }
            }
          }
        }
      }
    }

    .active-tab {
      // background-color: aqua;

      .tab-label {
        border-bottom: 1px solid #072fbe;
        color: #072fbe;
      }
    }
  }
}
</style>

二、运行效果

// Todo文章来源地址https://www.toymoban.com/news/detail-755508.html

到了这里,关于使用Vue实现一个当鼠标悬浮时出现,鼠标离开时消失的双层菜单的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Vue - 实现垂直菜单分类栏目,鼠标移入后右侧出现悬浮二级菜单容器效果(完整示例源码,详细代码注释,一键复制开箱即用)

    网上的教程都太乱了,各种杂乱无注释代码、图片资源丢失、一堆样式代码,根本无法改造后应用到自己的项目中。 本文实现了 在 Vue / Nuxt 项目中,垂直分类菜单项,当用户鼠标移入菜单后,右侧自动出现二级分类悬浮容器盒子效果, 您可以直接复制源码,然后按照您的需

    2024年02月11日
    浏览(45)
  • VUE-鼠标悬浮到目标区域变成小手模样

    需求:在这个按钮上,当鼠标悬浮上时要变成小手。记录下自己的开发内容 实现:就是针对CSS给这个样式指定个属性就好了【 cursor: pointer; 】 单独加到你要实现需求的div内或者元素里 也可以加在class中,定义一个class样式,最后在class=“ small-hand-style(名字跟自己定义的样式

    2023年04月09日
    浏览(32)
  • VUE+Vis.js鼠标悬浮title提前显示BUG解决方法

    在使用VUE+Vis.js做拓扑图,利用鼠标悬浮放在图标展示设备信息时,发现鼠标一放在图标上面时,标题表会提前在放置的元素下显示,鼠标再放到图标上去元素才会隐藏变成悬浮状态  解决方法: 添加一个div元素,设置 v-show=\\\"false\\\" ,将作为悬浮窗的元素放进去,因为v-show只是

    2024年01月23日
    浏览(54)
  • 【UI】 elementui的dialog弹窗打开时CSS的BUG | 滚动条消失bug

    问题描述:el-dialog弹窗没打开时,页面有滚动条,会占据浏览器右侧15px左右的宽度。 dialog打开之后,遮罩层占整个浏览器的宽度,且没有滚动条。网页头部滚动条消失,导致网页头部向右移动15px左右。每次打开dialog网页头部就向右移动;关闭dialog网页头部就向左移动。直接

    2024年02月15日
    浏览(67)
  • 纯css实现鼠标悬浮、点击更改元素背景

    css伪类 active:元素被点击时变色,点击后颜色消失 focus:元素被点击后变色,点击后颜色不消失 hover:鼠标悬浮时变色,移除后颜色消失 template部分代码 style部分代码

    2024年02月16日
    浏览(47)
  • elementUI el-table实现鼠标悬浮某一行,在鼠标右侧展示提示信息

    背景 el-table组件中,可以通过勾选某条数据来创建单据,但是有些数据没有权限使用,就需要禁用掉勾选的功能,然后当鼠标悬浮在这一行的时候,展示类似于toolTip的提示框。 除了当鼠标悬浮在某一行,展示类似于toolTip的提示框这一条el-table是没有提供配置项的,其他的都

    2024年02月08日
    浏览(60)
  • vue2在element UI的table中给指定列添加圆点标志,鼠标悬浮出提示信息

    要求在列表数据给指定数据添加一些标志,鼠标悬浮提示指定数据.左侧为标志截图.右侧为悬浮提示截图. 在template中 想要添加标志的那一列 添加圆点和悬浮提示信息两个节点,并添加单元格进入 退出事件两个事件. 具体使用时样式细微处自行调节 给单元格移入事件设

    2024年02月06日
    浏览(53)
  • Vue3 实现一个无缝滚动组件(支持鼠标手动滚动)

    前言 在日常开发中,经常遇到需要支持列表循环滚动展示,特别是在数据化大屏开发中,无缝滚动使用频率更为频繁,在jquery时代,我们常用的无缝滚动组件为liMarquee,在vue中已经有vue-seamless-scroll组件(通过Vue2实现,不支持鼠标手动滚动),但是在使用过程中,发现滚动后

    2024年02月08日
    浏览(51)
  • Unity3D实现鼠标悬浮UI或物体上显示文字信息

    Unity工具 大家好,我是心疼你的一切,不定时更新Unity开发技巧,觉得有用记得一键三连哦。 本篇文章实现一个鼠标悬浮在ui或者物体上显示文字的功能 unity鼠标悬浮ui显示文字 鼠标进入UI执行的 鼠标离开UI执行的 鼠标在ui里滑动执行的 1. 2. 搭建比较简单,各位顺便搭建吧。

    2024年02月04日
    浏览(95)
  • echarts饼图:实现多层图表同步自动轮播,鼠标悬浮时停止轮播,移出鼠标后重新开始轮播效果

    需要用echarts实现一个圆环饼图,在圆环中心显示每个系列的具体数据,加载成功后图表系列自动高亮轮播展示;当用户鼠标悬浮某一系列的图形时,停止自动轮播并高亮显示该图形,移出鼠标后重新开始轮播 echarts圆环饼图示例 (开发echarts图表时,对照配置项文档和API文档

    2024年02月13日
    浏览(57)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包