当前位置:首页 > 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等),实现更复杂的动画效果。

/* 缩放动画 */
.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:

npm install animate.css

然后在main.js中引入:

import 'animate.css'

JavaScript钩子实现复杂动画

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

vue过度动画实现筛选

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实现前端分离

vue实现前端分离

Vue 实现前后端分离 前后端分离是一种架构模式,前端负责页面渲染和交互逻辑,后端提供数据接口。Vue.js 作为前端框架,非常适合实现前后端分离的开发模式。 核心实现步骤 创建 Vue 项目 使用…

在线脑图 vue 实现

在线脑图 vue 实现

在线脑图 Vue 实现方案 使用开源库实现 推荐使用 mind-elixir 或 jsmind 这类开源库,它们专为脑图设计且支持 Vue 集成。 安装依赖: npm install mi…

vue前端实现下载进度

vue前端实现下载进度

实现下载进度条的基本思路 在Vue中实现下载进度条,通常需要结合XMLHttpRequest或Fetch API来监听下载进度事件。通过计算已下载数据与总数据的比例,动态更新进度条的显示。 使用XM…

vue实现颜色

vue实现颜色

Vue 实现颜色的方法 在 Vue 中实现颜色管理可以通过多种方式,以下是一些常见的方法: 使用 CSS 变量动态绑定颜色 在 Vue 组件的样式中定义 CSS 变量,并通过 Vue 的数据绑定动态…

vue 实现打印

vue 实现打印

Vue 实现打印功能的方法 在Vue项目中实现打印功能,可以通过以下几种方式实现: 使用window.print()方法 通过调用浏览器的原生打印API实现基础打印功能,适用于简单内容打印。 //…

vue 实现树状

vue 实现树状

Vue 实现树状结构的方法 递归组件实现树状结构 递归组件是 Vue 中实现树状结构的常见方法。通过组件自身调用自身,可以轻松构建多层级树状结构。 <template> <ul…