动画反馈

动画反馈能够增强用户操作的感知,提供流畅自然的交互体验。

动画类型

CSS过渡

transition实现属性变化的平滑过渡

CSS动画

animation实现复杂的动画序列

JavaScript动画

requestAnimationFrame实现高性能动画

第三方库

GSAP、Framer Motion等专业动画库

动画应用场景

场景 动画效果 用户体验
按钮点击 缩放、颜色变化、阴影效果 确认点击操作
页面切换 淡入淡出、滑动、翻转效果 平滑过渡体验
加载状态 旋转、脉冲、骨架屏 缓解等待焦虑
错误提示 抖动、渐现、滑入效果 吸引注意,强调重要信息

动画实现方式

原生JavaScript

结合CSS类和JavaScript控制动画

// CSS: .fade-enter { opacity: 0; transform: translateY(-10px); } .fade-enter-active { transition: all 0.3s ease; } .fade-exit { opacity: 1; transform: translateY(0); } .fade-exit-active { transition: all 0.3s ease; } // JavaScript: function animateElement(element, animationClass) { element.classList.add(animationClass); const animationEndHandler = function() { element.classList.remove(animationClass); element.removeEventListener('animationend', animationEndHandler); }; element.addEventListener('animationend', animationEndHandler); } // 按钮点击动画 const button = document.querySelector('#animated-button'); button.addEventListener('click', function() { this.classList.add('button-click-animation'); setTimeout(() => { this.classList.remove('button-click-animation'); }, 300); });

Vue.js实现

使用Vue的过渡系统,简化动画处理

<!-- Vue模板 --> <template> <div> <!-- 按钮点击动画 --> <button @click="animateButton" :class="{ 'animate': isAnimating }"> 点击我 </button> <!-- 元素过渡 --> <transition name="fade"> <div v-if="showElement" class="animated-element"> 我会淡入淡出 </div> </transition> <!-- 列表动画 --> <transition-group name="list" tag="ul" class="list-container"> <li v-for="item in items" :key="item.id" class="list-item"> {{ item.text }} </li> </transition-group> </div> </template> <script> export default { data() { return { isAnimating: false, showElement: true, items: [ { id: 1, text: '项目1' }, { id: 2, text: '项目2' }, { id: 3, text: '项目3' } ] } }, methods: { animateButton() { this.isAnimating = true; setTimeout(() => { this.isAnimating = false; }, 300); } } } </script> <style> .fade-enter-active, .fade-leave-active { transition: opacity 0.5s; } .fade-enter, .fade-leave-to { opacity: 0; } .list-item { display: inline-block; margin-right: 10px; } .list-enter-active, .list-leave-active { transition: all 0.5s; } .list-enter, .list-leave-to { opacity: 0; transform: translateY(30px); } </style>
← Interaction Ui Interaction Modal →