当前位置:首页 > VUE

vue实现抽屉效果

2026-03-29 15:01:23VUE

使用 Vue 实现抽屉效果

基础实现(基于 Vue 原生功能)

模板部分
通过 v-ifv-show 控制抽屉的显示与隐藏,结合 CSS 过渡动画实现平滑效果。

<template>
  <div>
    <button @click="isOpen = !isOpen">切换抽屉</button>
    <transition name="slide">
      <div class="drawer" v-if="isOpen">
        <div class="drawer-content">抽屉内容</div>
      </div>
    </transition>
  </div>
</template>

脚本部分
使用 data 管理抽屉状态。

<script>
export default {
  data() {
    return {
      isOpen: false
    }
  }
}
</script>

样式部分
定义抽屉的定位和过渡动画。

<style>
.drawer {
  position: fixed;
  top: 0;
  right: 0;
  width: 300px;
  height: 100%;
  background: white;
  box-shadow: -2px 0 5px rgba(0, 0, 0, 0.1);
}

.slide-enter-active, .slide-leave-active {
  transition: transform 0.3s ease;
}
.slide-enter-from, .slide-leave-to {
  transform: translateX(100%);
}
</style>

使用第三方库(如 Element UI)

安装 Element UI
通过 npm 或 yarn 安装依赖。

npm install element-ui

代码示例
直接使用 el-drawer 组件。

<template>
  <div>
    <button @click="drawer = true">打开抽屉</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>

自定义可复用的抽屉组件

创建组件文件
封装抽屉逻辑,支持动态插槽内容。

<!-- Drawer.vue -->
<template>
  <transition name="fade">
    <div class="overlay" v-if="isOpen" @click="close">
      <div class="drawer" @click.stop>
        <slot></slot>
      </div>
    </div>
  </transition>
</template>

<script>
export default {
  props: {
    isOpen: {
      type: Boolean,
      required: true
    }
  },
  methods: {
    close() {
      this.$emit('close')
    }
  }
}
</script>

<style scoped>
.overlay {
  position: fixed;
  top: 0;
  left: 0;
  width: 100%;
  height: 100%;
  background: rgba(0, 0, 0, 0.5);
}
.drawer {
  position: absolute;
  right: 0;
  width: 300px;
  height: 100%;
  background: white;
}
.fade-enter-active, .fade-leave-active {
  transition: opacity 0.3s;
}
.fade-enter-from, .fade-leave-to {
  opacity: 0;
}
</style>

父组件调用
通过 props 控制显示状态。

vue实现抽屉效果

<template>
  <button @click="showDrawer = true">打开抽屉</button>
  <Drawer :isOpen="showDrawer" @close="showDrawer = false">
    <h2>自定义内容</h2>
  </Drawer>
</template>

<script>
import Drawer from './Drawer.vue'
export default {
  components: { Drawer },
  data() {
    return {
      showDrawer: false
    }
  }
}
</script>

关键注意事项

  • 定位方式:抽屉通常使用 fixedabsolute 定位,确保脱离文档流。
  • 动画性能:优先使用 CSS 的 transformopacity 属性实现动画,避免重排。
  • 无障碍访问:为抽屉添加 aria-modalrole="dialog" 属性,并管理焦点。
  • 移动端适配:增加触摸手势支持(如右滑关闭)。

标签: 抽屉效果
分享给朋友:

相关文章

vue实现定位效果

vue实现定位效果

使用Geolocation API实现定位 在Vue中可以通过浏览器内置的Geolocation API获取用户位置信息。需要在组件的mounted钩子中调用相关方法: mounted() {…

vue实现效果

vue实现效果

Vue 实现常见效果的方法 数据绑定与响应式更新 Vue 的核心特性是数据绑定,通过 v-model 实现表单元素与数据的双向绑定。例如输入框与数据的实时同步: <input v-model=…

h5页面滑动效果实现

h5页面滑动效果实现

实现H5页面滑动效果的方法 H5页面滑动效果可以通过多种方式实现,包括原生JavaScript、CSS动画或第三方库。以下是几种常见的方法: 使用CSS Scroll Snap CSS Scroll…

vue实现凤凰效果

vue实现凤凰效果

Vue 实现凤凰效果 凤凰效果通常指一种视觉动画,模拟凤凰展翅、火焰燃烧等动态效果。在 Vue 中实现这种效果,可以结合 CSS 动画、Canvas 或第三方动画库(如 GSAP)。以下是几种实现方式…

vue 实现toggle效果

vue 实现toggle效果

使用 v-show 实现 Toggle 通过 v-show 指令可以控制元素的显示与隐藏,适合频繁切换的场景。v-show 仅切换 CSS 的 display 属性,不会销毁和重建 DOM。 <…

vue 实现动画效果

vue 实现动画效果

Vue 实现动画效果的方法 Vue 提供了多种方式实现动画效果,包括内置的过渡系统、第三方动画库以及 CSS 动画。以下是几种常见的方法: 使用 Vue 内置过渡系统 Vue 的 <trans…