当前位置:首页 > VUE

vue实现侧边抽屉

2026-03-28 08:42:59VUE

Vue 实现侧边抽屉

使用 Vue 原生实现

创建一个抽屉组件,通过 v-model 控制显示和隐藏。

<template>
  <div class="drawer-container">
    <div class="drawer-mask" v-if="isOpen" @click="closeDrawer"></div>
    <div class="drawer" :class="{ 'drawer-open': isOpen }">
      <slot></slot>
    </div>
  </div>
</template>

<script>
export default {
  props: {
    value: {
      type: Boolean,
      default: false
    }
  },
  computed: {
    isOpen: {
      get() {
        return this.value
      },
      set(val) {
        this.$emit('input', val)
      }
    }
  },
  methods: {
    closeDrawer() {
      this.isOpen = false
    }
  }
}
</script>

<style>
.drawer-container {
  position: relative;
}

.drawer-mask {
  position: fixed;
  top: 0;
  left: 0;
  right: 0;
  bottom: 0;
  background-color: rgba(0, 0, 0, 0.5);
  z-index: 999;
}

.drawer {
  position: fixed;
  top: 0;
  left: 0;
  width: 300px;
  height: 100%;
  background-color: #fff;
  box-shadow: 2px 0 8px rgba(0, 0, 0, 0.15);
  transform: translateX(-100%);
  transition: transform 0.3s ease;
  z-index: 1000;
}

.drawer-open {
  transform: translateX(0);
}
</style>

使用第三方库

Vant、Element UI 等 UI 库提供了现成的抽屉组件。

vue实现侧边抽屉

Vant 示例:

<template>
  <van-button type="primary" @click="showDrawer">显示抽屉</van-button>
  <van-popup
    v-model="show"
    position="left"
    :style="{ width: '80%', height: '100%' }"
  >
    抽屉内容
  </van-popup>
</template>

<script>
import { Popup, Button } from 'vant'

export default {
  components: {
    [Popup.name]: Popup,
    [Button.name]: Button
  },
  data() {
    return {
      show: false
    }
  },
  methods: {
    showDrawer() {
      this.show = true
    }
  }
}
</script>

Element UI 示例:

vue实现侧边抽屉

<template>
  <el-button @click="drawer = true" type="primary">打开抽屉</el-button>
  <el-drawer
    title="标题"
    :visible.sync="drawer"
    direction="ltr"
    :before-close="handleClose"
  >
    <span>内容区域</span>
  </el-drawer>
</template>

<script>
export default {
  data() {
    return {
      drawer: false
    }
  },
  methods: {
    handleClose(done) {
      done()
    }
  }
}
</script>

动画优化

为抽屉添加平滑的动画效果,可以使用 CSS transition 或 Vue 的 <transition> 组件。

<template>
  <transition name="slide">
    <div class="drawer" v-if="isOpen">
      <slot></slot>
    </div>
  </transition>
</template>

<style>
.slide-enter-active, .slide-leave-active {
  transition: transform 0.3s ease;
}

.slide-enter, .slide-leave-to {
  transform: translateX(-100%);
}
</style>

响应式设计

根据屏幕宽度调整抽屉大小。

.drawer {
  width: 300px;
}

@media (max-width: 768px) {
  .drawer {
    width: 80%;
  }
}

注意事项

  • 确保抽屉的 z-index 高于页面其他元素
  • 移动端考虑手势滑动关闭功能
  • 抽屉内容过长时需要处理滚动问题
  • 考虑无障碍访问,添加适当的 ARIA 属性

标签: 侧边抽屉
分享给朋友:

相关文章

vue 实现侧边栏

vue 实现侧边栏

使用 Vue 实现侧边栏 基于 Vue Router 的侧边栏导航 在 Vue 项目中,可以通过 Vue Router 结合组件化开发实现侧边栏导航。创建一个 Sidebar.vue 组件,动态渲染路…

vue实现抽屉侧边栏

vue实现抽屉侧边栏

Vue 实现抽屉侧边栏 使用 Vue 原生实现 通过 Vue 的 v-if 或 v-show 控制抽屉的显示与隐藏,结合 CSS 过渡动画实现平滑效果。 <template> <…

js实现抽屉

js实现抽屉

实现抽屉效果的JavaScript方法 使用纯JavaScript实现抽屉效果(通常指侧边栏滑动或元素展开/折叠)可以通过操作DOM元素的样式属性完成。以下是两种常见实现方式: 方式一:通过clas…

vue实现侧边导航

vue实现侧边导航

Vue 侧边导航实现方法 使用 Vue 实现侧边导航可以通过多种方式完成,以下提供几种常见方案: 基于 Element UI 的侧边导航 Element UI 提供了现成的导航组件,适合快速开发:…

vue实现抽屉效果

vue实现抽屉效果

使用 Vue 实现抽屉效果 基础实现(基于 Vue 原生功能) 通过 v-show 或 v-if 控制抽屉的显示与隐藏,结合 CSS 过渡动画实现平滑效果。 <template> &…

vue实现抽屉菜单

vue实现抽屉菜单

Vue 实现抽屉菜单的方法 使用 Vue 原生实现 通过 Vue 的 v-if 或 v-show 控制抽屉的显示与隐藏,结合 CSS 过渡动画实现平滑效果。 <template> &…