当前位置:首页 > 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实现视频会议

vue实现视频会议

使用 Vue 实现视频会议 技术选型 Vue.js 作为前端框架,结合 WebRTC 技术实现实时音视频通信。常用的库包括: peerjs:简化 WebRTC 的点对点连接。 socket.io:…

用vue实现滑动输入条

用vue实现滑动输入条

使用 Vue 实现滑动输入条 使用原生 HTML5 input range 实现 在 Vue 模板中直接使用 <input type="range">,通过 v-model 绑定数据:…

vue实现积分

vue实现积分

Vue 实现积分功能 在 Vue 中实现积分功能通常涉及前端展示、交互逻辑以及与后端 API 的通信。以下是常见的实现方法和步骤: 积分展示组件 创建一个积分展示组件,用于显示当前用户的积分。可以…

vue实现截图

vue实现截图

Vue 实现截图的方法 使用 html2canvas 库 安装 html2canvas 库: npm install html2canvas 在 Vue 组件中使用: import html2…

vue实现框架

vue实现框架

Vue 框架实现的核心方法 基础项目搭建 使用 Vue CLI 或 Vite 快速初始化项目。Vue CLI 适合传统项目,Vite 更适合现代轻量级应用。安装后通过命令行工具选择所需配置(如 Rou…

vue实现新闻

vue实现新闻

Vue 实现新闻功能 使用 Vue 实现新闻功能通常涉及新闻列表展示、新闻详情页、分类筛选等模块。以下是实现的基本思路和代码示例。 新闻列表展示 通过 Vue 组件展示新闻列表,通常使用 v-fo…