From 3872c8f29e192e871d9a14c378f8b0d9279775e6 Mon Sep 17 00:00:00 2001
From: bunny <1319900154@qq.com>
Date: Sat, 21 Jun 2025 23:53:33 +0800
Subject: [PATCH] =?UTF-8?q?=F0=9F=8E=89=20Vue2=20=E8=BF=87=E6=B8=A1?=
=?UTF-8?q?=E5=8A=A8=E7=94=BB=E4=B8=8E=20Animate.css=20=E6=95=B4=E5=90=88?=
=?UTF-8?q?=E6=8C=87=E5=8D=97?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
vue2-tutorials/single-file/demo2/package.json | 1 +
.../single-file/demo2/pnpm-lock.yaml | 8 +
vue2-tutorials/single-file/demo2/src/main.js | 1 +
.../Vue2 过渡动画与 Animate.css 整合指南.md | 166 ++++++++++++++++++
.../demo2/src/views/demo10/index.vue | 24 ++-
5 files changed, 194 insertions(+), 6 deletions(-)
create mode 100644 vue2-tutorials/single-file/demo2/src/views/demo10/Vue2 过渡动画与 Animate.css 整合指南.md
diff --git a/vue2-tutorials/single-file/demo2/package.json b/vue2-tutorials/single-file/demo2/package.json
index 7279fac..87fe210 100644
--- a/vue2-tutorials/single-file/demo2/package.json
+++ b/vue2-tutorials/single-file/demo2/package.json
@@ -9,6 +9,7 @@
"lint": "vue-cli-service lint"
},
"dependencies": {
+ "animate.css": "^4.1.1",
"core-js": "^3.8.3",
"nanoid": "^5.1.5",
"vue": "^2.6.14",
diff --git a/vue2-tutorials/single-file/demo2/pnpm-lock.yaml b/vue2-tutorials/single-file/demo2/pnpm-lock.yaml
index 44747a6..5feb654 100644
--- a/vue2-tutorials/single-file/demo2/pnpm-lock.yaml
+++ b/vue2-tutorials/single-file/demo2/pnpm-lock.yaml
@@ -8,6 +8,9 @@ importers:
.:
dependencies:
+ animate.css:
+ specifier: ^4.1.1
+ version: 4.1.1
core-js:
specifier: ^3.8.3
version: 3.43.0
@@ -1034,6 +1037,9 @@ packages:
ajv@8.17.1:
resolution: {integrity: sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==}
+ animate.css@4.1.1:
+ resolution: {integrity: sha512-+mRmCTv6SbCmtYJCN4faJMNFVNN5EuCTTprDTAo7YzIGji2KADmakjVA3+8mVDkZ2Bf09vayB35lSQIex2+QaQ==}
+
ansi-colors@4.1.3:
resolution: {integrity: sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==}
engines: {node: '>=6'}
@@ -5245,6 +5251,8 @@ snapshots:
json-schema-traverse: 1.0.0
require-from-string: 2.0.2
+ animate.css@4.1.1: {}
+
ansi-colors@4.1.3: {}
ansi-escapes@3.2.0: {}
diff --git a/vue2-tutorials/single-file/demo2/src/main.js b/vue2-tutorials/single-file/demo2/src/main.js
index 295fc6e..94a097c 100644
--- a/vue2-tutorials/single-file/demo2/src/main.js
+++ b/vue2-tutorials/single-file/demo2/src/main.js
@@ -1,3 +1,4 @@
+import "animate.css";
import Vue from "vue";
import VueRouter from "vue-router";
import App from "./App.vue";
diff --git a/vue2-tutorials/single-file/demo2/src/views/demo10/Vue2 过渡动画与 Animate.css 整合指南.md b/vue2-tutorials/single-file/demo2/src/views/demo10/Vue2 过渡动画与 Animate.css 整合指南.md
new file mode 100644
index 0000000..5862b4d
--- /dev/null
+++ b/vue2-tutorials/single-file/demo2/src/views/demo10/Vue2 过渡动画与 Animate.css 整合指南.md
@@ -0,0 +1,166 @@
+# Vue2 过渡动画与 Animate.css 整合指南
+
+## 一、Transition 与 TransitionGroup 对比
+
+| 特性 | Transition | TransitionGroup |
+| -------- | ----------------- | --------------- |
+| 用途 | 单个元素/组件过渡 | 列表项过渡 |
+| 要求 | 需要条件渲染 | 需要 `key` 属性 |
+| 动画类 | 自动生成 | 可自定义类名 |
+| 额外效果 | - | 自动处理定位 |
+
+## 二、Animate.css 集成方案
+
+### 1. 基本集成方法
+```html
+
+
+
+```
+
+### 2. 常用动画效果
+| 进入效果 | 离开效果 | 说明 |
+| ---------------------- | ------------------------ | -------- |
+| `animate__fadeIn` | `animate__fadeOut` | 淡入淡出 |
+| `animate__zoomIn` | `animate__zoomOut` | 缩放效果 |
+| `animate__slideInLeft` | `animate__slideOutRight` | 滑动效果 |
+| `animate__flipInX` | `animate__flipOutX` | 3D翻转 |
+
+## 三、自定义动画与库动画结合
+
+### 1. 混合使用示例
+```html
+
+
+ 自定义动画
+
+
+
+
+ {{ item.text }}
+
+```
+
+### 2. 动画性能优化
+```css
+/* 启用GPU加速 */
+.animate__animated {
+ animation-duration: 0.5s;
+ backface-visibility: hidden;
+}
+
+/* 限制动画影响范围 */
+.bunny-enter-active, .bunny-leave-active {
+ will-change: transform;
+ isolation: isolate;
+}
+```
+
+## 四、最佳实践建议
+
+### 1. 动画选择原则
+- **移动端**:使用较轻量的动画(如fade)
+- **重要交互**:使用明显的反馈动画(如bounce)
+- **连续操作**:保持动画风格一致
+
+### 2. 时间控制技巧
+```javascript
+// 动态控制动画时长
+data() {
+ return {
+ duration: window.innerWidth < 768 ? 300 : 500
+ }
+}
+```
+
+### 3. 无障碍访问
+```css
+/* 减少运动偏好设置 */
+@media (prefers-reduced-motion: reduce) {
+ .animate__animated,
+ .bunny-enter-active,
+ .bunny-leave-active {
+ animation: none !important;
+ transition: none !important;
+ }
+}
+```
+
+## 五、进阶应用场景
+
+### 1. 路由过渡动画
+```html
+
+
+
+
+
+```
+
+### 2. 状态驱动的动画
+```javascript
+computed: {
+ animationClass() {
+ return this.isError
+ ? 'animate__shakeX'
+ : 'animate__tada'
+ }
+}
+```
+
+### 3. 动画事件钩子
+```html
+
+ 内容
+
+
+
+```
+
+## 六、常见问题解决
+
+1. **动画不连贯**:
+ - 使用 `mode="out-in"` 确保顺序执行
+ - 检查 `key` 属性是否唯一
+
+2. **初始渲染无动画**:
+ - 添加 `appear` 属性
+ - 检查初始状态是否正确
+
+3. **移动端性能差**:
+ - 减少动画复杂度
+ - 使用 `will-change` 提示浏览器优化
+
diff --git a/vue2-tutorials/single-file/demo2/src/views/demo10/index.vue b/vue2-tutorials/single-file/demo2/src/views/demo10/index.vue
index 4ca312d..fbc633c 100644
--- a/vue2-tutorials/single-file/demo2/src/views/demo10/index.vue
+++ b/vue2-tutorials/single-file/demo2/src/views/demo10/index.vue
@@ -1,14 +1,26 @@
-
+
-
-
-
显示动画
-
-
+
+
+ 显示动画
+
+
+
+
+ - 嗬嗬嗬嗬嗬嗬嗬嗬嗬嗬嗬
+ - 哈哈哈哈哈哈哈哈哈哈哈
+
+
+