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

<template>
<div>
<button @click="toggleDrawer">Toggle Drawer</button>
<div class="drawer" :class="{ 'drawer-open': isOpen }">
<div class="drawer-content">
<!-- 抽屉内容 -->
<p>Drawer Content</p>
</div>
</div>
</div>
</template>
<script>
export default {
data() {
return {
isOpen: false
};
},
methods: {
toggleDrawer() {
this.isOpen = !this.isOpen;
}
}
};
</script>
<style>
.drawer {
position: fixed;
top: 0;
left: -300px;
width: 300px;
height: 100%;
background: #fff;
box-shadow: 2px 0 5px rgba(0, 0, 0, 0.1);
transition: left 0.3s ease;
}
.drawer-open {
left: 0;
}
</style>
使用第三方库(如 Element UI)
Element UI 提供了现成的 el-drawer 组件,可直接使用。

<template>
<div>
<button @click="drawer = true">Open Drawer</button>
<el-drawer
title="Drawer Title"
:visible.sync="drawer"
direction="ltr"
size="300px">
<span>Drawer Content</span>
</el-drawer>
</div>
</template>
<script>
export default {
data() {
return {
drawer: false
};
}
};
</script>
使用 Vue Transition 增强动画
通过 Vue 的 <transition> 组件实现更复杂的动画效果。
<template>
<div>
<button @click="isOpen = !isOpen">Toggle Drawer</button>
<transition name="slide">
<div v-if="isOpen" class="drawer">
<p>Drawer Content</p>
</div>
</transition>
</div>
</template>
<style>
.slide-enter-active, .slide-leave-active {
transition: transform 0.3s ease;
}
.slide-enter, .slide-leave-to {
transform: translateX(-100%);
}
.drawer {
position: fixed;
top: 0;
left: 0;
width: 300px;
height: 100%;
background: #fff;
box-shadow: 2px 0 5px rgba(0, 0, 0, 0.1);
}
</style>
响应式抽屉侧边栏
结合媒体查询,实现不同屏幕尺寸下的抽屉行为。
@media (max-width: 768px) {
.drawer {
width: 100%;
}
}
注意事项
- 抽屉的
z-index需合理设置,避免被其他元素遮挡。 - 点击抽屉外部区域关闭抽屉的功能可通过监听全局点击事件实现。
- 移动端需考虑手势滑动触发抽屉的交互。






