以下是一个使用Vue编写多级菜单组件,并添加了子菜单过渡效果的示例:

<template>
  <div class="menu">
    <ul>
      <li v-for="(item, index) in menuItems" :key="index" @mouseover="showSubMenu(index)" @mouseleave="hideSubMenu(index)">
        {{ item.name }}
        <transition name="slide">
          <ul class="sub-menu" v-if="item.showSubMenu">
            <li v-for="(subItem, subIndex) in item.subMenu" :key="subIndex">{{ subItem }}</li>
          </ul>
        </transition>
      </li>
    </ul>
  </div>
</template>

<script>
export default {
  data() {
    return {
      menuItems: [
        {
          name: "菜单1",
          showSubMenu: false,
          subMenu: ["子菜单1", "子菜单2", "子菜单3"],
        },
        {
          name: "菜单2",
          showSubMenu: false,
          subMenu: ["子菜单4", "子菜单5", "子菜单6"],
        },
        {
          name: "菜单3",
          showSubMenu: false,
          subMenu: ["子菜单7", "子菜单8", "子菜单9"],
        },
      ],
    };
  },
  methods: {
    showSubMenu(index) {
      this.menuItems[index].showSubMenu = true;
    },
    hideSubMenu(index) {
      this.menuItems[index].showSubMenu = false;
    },
  },
};
</script>

<style scoped>
.slide-enter-active,
.slide-leave-active {
  transition: all 0.5s ease;
}
.slide-enter,
.slide-leave-to {
  transform: translateX(20px);
  opacity: 0;
}
.menu {
  width: 200px;
  border: 1px solid #ccc;
  font-size: 16px;
  padding: 10px;
}
ul {
  list-style: none;
  margin: 0;
  padding: 0;
}
li {
  cursor: pointer;
  padding: 5px;
}
.sub-menu {
  background-color: #f7f7f7;
  padding: 5px;
}
</style>

在该示例中,我们使用了 v-for 指令来渲染菜单项和子菜单项,并使用 mouseovermouseleave 事件来控制子菜单的显示和隐藏。在子菜单项上,我们添加了一个 transition 组件,该组件使用了名为 slide 的过渡名称,并设置了过渡的动画效果。最后,我们在样式中定义了 slide 过渡所需的 CSS 样式。

使用vue编写多级菜单组件子菜单显示有过渡效果

原文地址: https://www.cveoy.top/t/topic/bNax 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录