当前位置:首页 > VUE

vue 实现侧边栏

2026-01-19 02:55:46VUE

使用 Vue 实现侧边栏

基于 Vue Router 的侧边栏导航

在 Vue 项目中,可以通过 Vue Router 结合组件化开发实现侧边栏导航。创建一个 Sidebar.vue 组件,动态渲染路由菜单:

vue 实现侧边栏

<template>
  <div class="sidebar">
    <ul>
      <li v-for="route in routes" :key="route.path">
        <router-link :to="route.path">{{ route.name }}</router-link>
      </li>
    </ul>
  </div>
</template>

<script>
export default {
  data() {
    return {
      routes: [
        { path: '/home', name: '首页' },
        { path: '/about', name: '关于' },
        { path: '/contact', name: '联系' }
      ]
    }
  }
}
</script>

<style>
.sidebar {
  width: 200px;
  background: #f0f0f0;
  padding: 20px;
}
.sidebar ul {
  list-style: none;
  padding: 0;
}
.sidebar li {
  margin-bottom: 10px;
}
</style>

可折叠侧边栏

通过 Vue 的响应式数据和条件渲染实现侧边栏的展开/折叠功能:

vue 实现侧边栏

<template>
  <div class="sidebar" :class="{ 'collapsed': isCollapsed }">
    <button @click="toggleSidebar">
      {{ isCollapsed ? '展开' : '折叠' }}
    </button>
    <ul v-show="!isCollapsed">
      <li v-for="route in routes" :key="route.path">
        <router-link :to="route.path">{{ route.name }}</router-link>
      </li>
    </ul>
  </div>
</template>

<script>
export default {
  data() {
    return {
      isCollapsed: false,
      routes: [
        { path: '/home', name: '首页' },
        { path: '/about', name: '关于' },
        { path: '/contact', name: '联系' }
      ]
    }
  },
  methods: {
    toggleSidebar() {
      this.isCollapsed = !this.isCollapsed
    }
  }
}
</script>

<style>
.sidebar {
  width: 200px;
  transition: width 0.3s;
}
.sidebar.collapsed {
  width: 50px;
}
</style>

使用 UI 框架实现

许多 Vue UI 框架提供了现成的侧边栏组件,如 Element UI 的 el-menu

<template>
  <el-menu
    default-active="1"
    class="el-menu-vertical"
    background-color="#545c64"
    text-color="#fff"
    active-text-color="#ffd04b">
    <el-menu-item index="1">
      <i class="el-icon-menu"></i>
      <span>首页</span>
    </el-menu-item>
    <el-menu-item index="2">
      <i class="el-icon-document"></i>
      <span>文档</span>
    </el-menu-item>
  </el-menu>
</template>

<script>
import { Menu, MenuItem } from 'element-ui'
export default {
  components: {
    'el-menu': Menu,
    'el-menu-item': MenuItem
  }
}
</script>

响应式侧边栏

结合媒体查询和 Vue 的响应式数据,实现移动端友好的侧边栏:

<template>
  <div>
    <button @click="showMobileMenu = true" class="mobile-menu-button">
      菜单
    </button>
    <div class="sidebar" :class="{ 'mobile-show': showMobileMenu }">
      <button @click="showMobileMenu = false" class="close-button">
        ×
      </button>
      <ul>
        <li v-for="route in routes" :key="route.path">
          <router-link :to="route.path">{{ route.name }}</router-link>
        </li>
      </ul>
    </div>
  </div>
</template>

<script>
export default {
  data() {
    return {
      showMobileMenu: false,
      routes: [
        { path: '/home', name: '首页' },
        { path: '/about', name: '关于' },
        { path: '/contact', name: '联系' }
      ]
    }
  }
}
</script>

<style>
.sidebar {
  width: 250px;
}
.mobile-menu-button {
  display: none;
}
@media (max-width: 768px) {
  .sidebar {
    position: fixed;
    top: 0;
    left: -250px;
    height: 100%;
    transition: left 0.3s;
    background: #fff;
    z-index: 100;
  }
  .sidebar.mobile-show {
    left: 0;
  }
  .mobile-menu-button {
    display: block;
  }
}
</style>

标签: 侧边vue
分享给朋友:

相关文章

vue实现文件下载

vue实现文件下载

使用 a 标签下载文件 通过动态创建 a 标签并触发点击事件实现文件下载。适用于直接下载服务器上的静态文件或 Blob 数据。 downloadFile(url, fileName) {…

vue实现微博印象

vue实现微博印象

实现微博印象功能的核心思路 微博印象功能通常指用户发布微博后,系统自动分析文本内容并提取关键词或标签,以可视化形式展示。Vue实现该功能需要结合文本分析、关键词提取和前端渲染技术。 文本分析与关键词…

vue手写签名如何实现

vue手写签名如何实现

实现手写签名的基本思路 在Vue中实现手写签名功能,通常需要借助HTML5的Canvas API来捕获用户的绘制操作。核心流程包括初始化画布、监听触摸/鼠标事件、记录轨迹以及生成签名图片。 安装依…

vue实现飘窗原理

vue实现飘窗原理

vue实现飘窗原理 飘窗效果通常指在页面上悬浮显示的弹窗或通知,跟随页面滚动或固定在某个位置。Vue实现这一效果主要依赖组件化开发、CSS定位和动态数据绑定。 组件结构设计 创建一个独立的Vue组件…

vue实现用户信息表

vue实现用户信息表

Vue 实现用户信息表的方法 使用 Vue CLI 创建项目 安装 Vue CLI 并初始化项目: npm install -g @vue/cli vue create user-info-tab…

vue实现递归

vue实现递归

Vue 实现递归组件的方法 在 Vue 中实现递归组件通常用于处理树形结构数据(如菜单、评论列表、文件目录等)。以下是具体实现方法: 定义递归组件 通过 name 选项让组件可以递归调用自身:…