当前位置:首页 > VUE

vue实现列表悬浮菜单

2026-02-25 05:32:30VUE

Vue 实现列表悬浮菜单的方法

使用 v-showv-if 控制菜单显示

在列表项上添加鼠标事件监听,通过 v-showv-if 控制悬浮菜单的显示与隐藏。v-show 通过 CSS 的 display 属性切换,适合频繁切换的场景;v-if 会销毁和重建 DOM,适合不频繁切换的场景。

<template>
  <div>
    <div 
      v-for="item in list" 
      :key="item.id"
      @mouseenter="showMenu(item.id)"
      @mouseleave="hideMenu(item.id)"
    >
      {{ item.name }}
      <div v-show="activeItemId === item.id" class="menu">
        <button @click="handleEdit(item)">编辑</button>
        <button @click="handleDelete(item)">删除</button>
      </div>
    </div>
  </div>
</template>

<script>
export default {
  data() {
    return {
      list: [
        { id: 1, name: '项目1' },
        { id: 2, name: '项目2' }
      ],
      activeItemId: null
    };
  },
  methods: {
    showMenu(id) {
      this.activeItemId = id;
    },
    hideMenu() {
      this.activeItemId = null;
    },
    handleEdit(item) {
      console.log('编辑', item);
    },
    handleDelete(item) {
      console.log('删除', item);
    }
  }
};
</script>

<style>
.menu {
  position: absolute;
  background: white;
  border: 1px solid #ddd;
  padding: 5px;
}
</style>

使用 CSS 控制悬浮效果

vue实现列表悬浮菜单

通过纯 CSS 的 :hover 伪类实现悬浮菜单,无需 JavaScript 逻辑。这种方法简单高效,适合不需要复杂交互的场景。

<template>
  <div>
    <div v-for="item in list" :key="item.id" class="list-item">
      {{ item.name }}
      <div class="menu">
        <button @click="handleEdit(item)">编辑</button>
        <button @click="handleDelete(item)">删除</button>
      </div>
    </div>
  </div>
</template>

<script>
export default {
  data() {
    return {
      list: [
        { id: 1, name: '项目1' },
        { id: 2, name: '项目2' }
      ]
    };
  },
  methods: {
    handleEdit(item) {
      console.log('编辑', item);
    },
    handleDelete(item) {
      console.log('删除', item);
    }
  }
};
</script>

<style>
.list-item {
  position: relative;
}
.menu {
  display: none;
  position: absolute;
  background: white;
  border: 1px solid #ddd;
  padding: 5px;
}
.list-item:hover .menu {
  display: block;
}
</style>

使用第三方组件库

vue实现列表悬浮菜单

如果需要更复杂的悬浮菜单功能,可以借助第三方组件库如 Element UI、Ant Design Vue 等。这些库提供了现成的悬浮菜单组件,支持丰富的配置和交互。

以 Element UI 为例:

<template>
  <div>
    <el-table :data="list" style="width: 100%">
      <el-table-column prop="name" label="名称"></el-table-column>
      <el-table-column label="操作">
        <template #default="scope">
          <el-dropdown>
            <span class="el-dropdown-link">
              菜单<i class="el-icon-arrow-down"></i>
            </span>
            <template #dropdown>
              <el-dropdown-menu>
                <el-dropdown-item @click="handleEdit(scope.row)">编辑</el-dropdown-item>
                <el-dropdown-item @click="handleDelete(scope.row)">删除</el-dropdown-item>
              </el-dropdown-menu>
            </template>
          </el-dropdown>
        </template>
      </el-table-column>
    </el-table>
  </div>
</template>

<script>
export default {
  data() {
    return {
      list: [
        { id: 1, name: '项目1' },
        { id: 2, name: '项目2' }
      ]
    };
  },
  methods: {
    handleEdit(item) {
      console.log('编辑', item);
    },
    handleDelete(item) {
      console.log('删除', item);
    }
  }
};
</script>

注意事项

  • 悬浮菜单的位置通常通过 position: absoluteposition: relative 配合控制。
  • 避免悬浮菜单被其他元素遮挡,可通过调整 z-index 解决。
  • 移动端设备可能需要额外处理触摸事件。

标签: 菜单列表
分享给朋友:

相关文章

纯css制作下拉菜单

纯css制作下拉菜单

纯CSS下拉菜单实现方法 通过CSS的:hover伪类和display属性可以实现纯CSS下拉菜单,无需JavaScript。以下是具体实现方式: HTML结构示例: <nav clas…

vue菜单实现

vue菜单实现

实现Vue菜单的基本方法 使用Vue.js创建菜单可以通过多种方式实现,包括使用原生Vue组件、第三方UI库或自定义解决方案。以下是几种常见的实现方法: 使用原生Vue组件 创建基本的菜单结构可以…

h5 实现列表

h5 实现列表

列表实现方法 在HTML5中,可以通过多种方式实现列表,包括无序列表、有序列表和自定义列表。以下是具体的实现方法。 无序列表 无序列表使用<ul>标签,列表项使用<li>标签…

css制作下拉菜单

css制作下拉菜单

使用纯CSS制作下拉菜单 通过HTML和CSS可以创建无需JavaScript的下拉菜单,主要利用:hover伪类和display属性控制显示隐藏。 HTML结构示例: <div class…

vue实现列表页

vue实现列表页

Vue 实现列表页的方法 数据绑定与渲染 使用 v-for 指令动态渲染列表数据,结合 :key 确保渲染性能。示例代码: <template> <ul> &l…

vue 底部菜单实现

vue 底部菜单实现

实现 Vue 底部菜单的方法 使用 v-if 或 v-show 控制显示 在 Vue 中可以通过条件渲染控制底部菜单的显示与隐藏。v-if 适合动态切换频率较低的场景,v-show 适合频繁切换的场景…