vue抽屉组件实现
Vue 抽屉组件实现
使用 Element UI 实现
Element UI 提供了现成的抽屉组件 el-drawer,可以快速实现抽屉效果。
安装 Element UI:
npm install element-ui
在 Vue 文件中引入并使用:
<template>
<div>
<el-button @click="drawer = true">打开抽屉</el-button>
<el-drawer
title="标题"
:visible.sync="drawer"
direction="rtl"
size="50%">
<span>抽屉内容</span>
</el-drawer>
</div>
</template>
<script>
export default {
data() {
return {
drawer: false
}
}
}
</script>
自定义抽屉组件
如果需要自定义抽屉组件,可以通过 Vue 的过渡和动态组件实现。

创建自定义抽屉组件 CustomDrawer.vue:
<template>
<transition name="slide">
<div v-if="visible" class="drawer">
<div class="drawer-header">
<h3>{{ title }}</h3>
<button @click="$emit('close')">关闭</button>
</div>
<div class="drawer-body">
<slot></slot>
</div>
</div>
</transition>
</template>
<script>
export default {
props: {
visible: Boolean,
title: String
}
}
</script>
<style>
.drawer {
position: fixed;
top: 0;
right: 0;
width: 300px;
height: 100%;
background: #fff;
box-shadow: -2px 0 5px rgba(0, 0, 0, 0.1);
}
.slide-enter-active, .slide-leave-active {
transition: transform 0.3s ease;
}
.slide-enter, .slide-leave-to {
transform: translateX(100%);
}
</style>
在父组件中使用:

<template>
<div>
<button @click="showDrawer = true">打开抽屉</button>
<CustomDrawer
:visible="showDrawer"
title="自定义抽屉"
@close="showDrawer = false">
<p>自定义抽屉内容</p>
</CustomDrawer>
</div>
</template>
<script>
import CustomDrawer from './CustomDrawer.vue'
export default {
components: { CustomDrawer },
data() {
return {
showDrawer: false
}
}
}
</script>
使用 VueUse 实现
VueUse 提供了 useToggle 等组合式 API,可以简化抽屉状态管理。
安装 VueUse:
npm install @vueuse/core
使用示例:
<template>
<div>
<button @click="toggle()">切换抽屉</button>
<div v-if="isOpen" class="drawer">
<p>使用 VueUse 实现的抽屉</p>
<button @click="toggle()">关闭</button>
</div>
</div>
</template>
<script>
import { useToggle } from '@vueuse/core'
export default {
setup() {
const [isOpen, toggle] = useToggle(false)
return { isOpen, toggle }
}
}
</script>
<style>
.drawer {
position: fixed;
top: 0;
right: 0;
width: 300px;
height: 100%;
background: #fff;
box-shadow: -2px 0 5px rgba(0, 0, 0, 0.1);
}
</style>
注意事项
- 抽屉组件通常需要设置
position: fixed或position: absolute定位 - 考虑添加遮罩层(overlay)来增强用户体验
- 移动端可能需要添加手势支持(滑动关闭)
- 注意处理滚动锁定问题,防止背景内容滚动






