当前位置:首页 > VUE

vue过度动画实现筛选

2026-01-22 06:20:43VUE

vue过渡动画实现筛选

在Vue中实现筛选功能的过渡动画,可以通过结合<transition><transition-group>组件与Vue的响应式数据特性来完成。以下是几种常见的实现方法:

使用transition-group实现列表筛选动画

通过v-for渲染列表,配合<transition-group>实现条目新增、删除或筛选时的动画效果。

<template>
  <div>
    <input v-model="searchQuery" placeholder="筛选条件">
    <transition-group name="list" tag="ul">
      <li v-for="item in filteredList" :key="item.id">
        {{ item.name }}
      </li>
    </transition-group>
  </div>
</template>

<script>
export default {
  data() {
    return {
      searchQuery: '',
      items: [
        { id: 1, name: 'Apple' },
        { id: 2, name: 'Banana' },
        { id: 3, name: 'Orange' }
      ]
    }
  },
  computed: {
    filteredList() {
      return this.items.filter(item => 
        item.name.toLowerCase().includes(this.searchQuery.toLowerCase())
      )
    }
  }
}
</script>

<style>
.list-enter-active, .list-leave-active {
  transition: all 0.5s ease;
}
.list-enter, .list-leave-to {
  opacity: 0;
  transform: translateY(30px);
}
</style>

使用CSS过渡类名自定义动画

通过定义Vue过渡的6个CSS类名(v-enter/v-leave等),实现更复杂的动画效果。

vue过度动画实现筛选

/* 缩放动画 */
.filter-enter-active {
  transition: transform 0.3s cubic-bezier(0.5, 0, 0.5, 1.5), opacity 0.3s;
}
.filter-leave-active {
  transition: transform 0.2s, opacity 0.2s;
}
.filter-enter {
  opacity: 0;
  transform: scale(0.9);
}
.filter-leave-to {
  opacity: 0;
  transform: scale(0.9);
}
<transition name="filter" mode="out-in">
  <div key="filtered-content">
    <!-- 筛选后的内容 -->
  </div>
</transition>

结合Animate.css库实现预置动画

通过引入第三方动画库快速实现专业动画效果。

<transition-group
  enter-active-class="animate__animated animate__fadeInDown"
  leave-active-class="animate__animated animate__fadeOutUp"
>
  <!-- 列表内容 -->
</transition-group>

需先安装Animate.css:

vue过度动画实现筛选

npm install animate.css

然后在main.js中引入:

import 'animate.css'

JavaScript钩子实现复杂动画

通过transition的JavaScript钩子(beforeEnter/enter等)配合GSAP等动画库实现高级效果。

methods: {
  beforeEnter(el) {
    el.style.opacity = 0
    el.style.transform = 'translateX(50px)'
  },
  enter(el, done) {
    gsap.to(el, {
      opacity: 1,
      x: 0,
      duration: 0.5,
      onComplete: done
    })
  }
}
<transition
  @before-enter="beforeEnter"
  @enter="enter"
  :css="false"
>
  <!-- 内容 -->
</transition>

注意事项

  1. 始终为v-for列表中的元素设置唯一的key属性
  2. 使用mode="out-in"避免新旧元素同时出现的问题
  3. 复杂动画建议使用requestAnimationFrame或动画库优化性能
  4. 移动端注意硬件加速(使用transformopacity属性)

通过组合这些技术,可以创建从简单到复杂的各种筛选动画效果,提升用户体验。

标签: 动画vue
分享给朋友:

相关文章

vue实现tab换行

vue实现tab换行

Vue实现Tab切换的常见方法 使用Vue实现Tab切换功能可以通过多种方式完成,以下是几种常见的方法: 动态组件结合v-if或v-show 通过v-if或v-show控制不同Tab内容的显示…

vue登录逻辑的实现

vue登录逻辑的实现

Vue 登录逻辑实现 前端实现 创建登录组件 在 Vue 项目中创建一个登录组件,通常命名为 Login.vue。该组件包含表单元素,如用户名和密码输入框,以及提交按钮。 <template…

vue查看更多怎么实现

vue查看更多怎么实现

实现 Vue 的“查看更多”功能 数据截取与显示控制 通过 v-if 或 v-show 控制内容的显示与隐藏。初始状态下只显示部分内容,点击“查看更多”后展开完整内容。 <template&g…

vue按钮实现截屏

vue按钮实现截屏

Vue 按钮实现截屏的方法 在 Vue 项目中实现截屏功能可以通过多种方式完成,以下是几种常见的方法: 使用 html2canvas 库 安装 html2canvas 库: npm insta…

vue异步组建实现原理

vue异步组建实现原理

Vue 异步组件实现原理 Vue 的异步组件允许将组件按需加载,通常用于代码分割或延迟加载非关键组件。其核心原理基于 Promise 和动态导入。 基本实现方式 通过 defineAsyncCom…

vue广告实现

vue广告实现

Vue 广告实现方法 在 Vue 项目中实现广告功能可以通过多种方式完成,具体取决于广告类型和需求。以下是几种常见的实现方法: 使用第三方广告平台 许多广告平台如 Google AdSense、百…