当前位置:首页 > VUE

vue抽屉组件实现

2026-01-15 23:40:21VUE

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 的过渡和动态组件实现。

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>

在父组件中使用:

vue抽屉组件实现

<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: fixedposition: absolute 定位
  • 考虑添加遮罩层(overlay)来增强用户体验
  • 移动端可能需要添加手势支持(滑动关闭)
  • 注意处理滚动锁定问题,防止背景内容滚动

标签: 抽屉组件
分享给朋友:

相关文章

vue实现下拉框组件

vue实现下拉框组件

Vue 下拉框组件实现 基础实现 创建基础下拉框组件,使用v-model实现双向数据绑定: <template> <div class="dropdown"> &…

uniapp组件

uniapp组件

uniapp组件基础概念 uniapp的组件系统基于Vue.js,支持跨平台开发(H5、小程序、App等)。组件分为内置基础组件(如<view>、<button>)和自定义组件…

react组件如何通讯

react组件如何通讯

React 组件通讯方式 React 组件间的通讯方式主要包括以下几种方法,适用于不同场景下的数据传递和状态管理需求。 父子组件通讯(Props 传递) 父组件通过 props 向子组件传递数据或回…

vue组件实现vmodel

vue组件实现vmodel

Vue 组件实现 v-model 在 Vue 中,v-model 是双向数据绑定的语法糖,默认情况下绑定 value 属性并监听 input 事件。在自定义组件中实现 v-model 需要正确配置 p…

vue实现search组件

vue实现search组件

Vue 实现搜索组件 基础实现 创建一个基础的搜索组件需要包含输入框和搜索逻辑。以下是一个简单的实现示例: <template> <div class="search-cont…

vue实现组件刷新

vue实现组件刷新

强制重新渲染组件 使用 this.$forceUpdate() 方法可以强制 Vue 实例重新渲染,但不会更新子组件。适用于依赖非响应式数据的情况。 methods: { refreshComp…