当前位置: 首页 > article >正文

前端动画:别让你的页面像块木头一样僵硬

前端动画别让你的页面像块木头一样僵硬什么是前端动画前端动画是指在前端页面中添加的动态效果让页面更加生动有趣。别以为动画只是花里胡哨的东西好的动画可以提升用户体验让你的应用脱颖而出。为什么需要动画提升用户体验平滑的动画可以让用户操作更加流畅引导用户注意力通过动画引导用户关注重要内容增强品牌形象独特的动画可以成为品牌的识别特征改善交互反馈通过动画提供操作反馈让用户知道操作是否成功前端动画技术1. CSS 动画CSS 动画是最基础的前端动画技术通过keyframes和animation属性实现。/* 简单的淡入动画 */ keyframes fadeIn { from { opacity: 0; } to { opacity: 1; } } .fade-in { animation: fadeIn 1s ease-in-out; } /* 复杂的旋转动画 */ keyframes spin { 0% { transform: rotate(0deg); } 100% { transform: rotate(360deg); } } .spin { animation: spin 2s linear infinite; }2. CSS 过渡CSS 过渡是一种简单的动画技术通过transition属性实现元素状态变化时的平滑过渡。/* 悬停效果 */ .button { background-color: #007bff; color: white; padding: 10px 20px; border-radius: 4px; transition: all 0.3s ease; } .button:hover { background-color: #0056b3; transform: translateY(-2px); box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1); }3. JavaScript 动画JavaScript 动画通过requestAnimationFrameAPI 实现提供了更灵活的控制。// 简单的动画函数 function animate(element, properties, duration) { const start performance.now(); const startProperties {}; // 保存初始值 for (const property in properties) { startProperties[property] parseFloat(getComputedStyle(element)[property]); } function update(currentTime) { const elapsed currentTime - start; const progress Math.min(elapsed / duration, 1); // 应用动画 for (const property in properties) { const startValue startProperties[property]; const endValue properties[property]; const currentValue startValue (endValue - startValue) * progress; element.style[property] currentValue (property opacity ? : px); } if (progress 1) { requestAnimationFrame(update); } } requestAnimationFrame(update); } // 使用 const element document.querySelector(.box); animate(element, { opacity: 1, left: 100, top: 100 }, 1000);4. GSAPGSAPGreenSock Animation Platform是一个功能强大的JavaScript动画库提供了丰富的动画效果和控制选项。// 安装 // npm install gsap // 使用 import gsap from gsap; // 基本动画 gsap.to(.box, { x: 100, y: 100, opacity: 1, duration: 1, ease: power2.out }); // 时间线动画 const tl gsap.timeline(); tl.to(.box1, { x: 100, duration: 1 }).to(.box2, { x: 200, duration: 1 }, -0.5); // 重叠动画5. Framer MotionFramer Motion 是一个React动画库提供了简洁的API和丰富的动画效果。// 安装 // npm install framer-motion // 使用 import { motion } from framer-motion; function MyComponent() { return ( motion.div initial{{ opacity: 0, y: 20 }} animate{{ opacity: 1, y: 0 }} transition{{ duration: 0.5 }} Hello, World! /motion.div ); }动画最佳实践保持简洁不要过度使用动画以免分散用户注意力考虑性能使用CSS动画优先避免在主线程上执行复杂的JavaScript动画尊重用户偏好提供减少动画的选项尊重用户的系统设置测试不同设备确保动画在不同设备上都能正常工作使用缓动函数选择合适的缓动函数让动画更加自然保持一致性在整个应用中使用一致的动画风格考虑可访问性确保动画不会对有前庭障碍的用户造成不适常见动画效果1. 页面过渡// 使用Framer Motion实现页面过渡 import { AnimatePresence } from framer-motion; function App() { return ( AnimatePresence modewait motion.div key{location.pathname} initial{{ opacity: 0, y: 20 }} animate{{ opacity: 1, y: 0 }} exit{{ opacity: 0, y: -20 }} transition{{ duration: 0.3 }} Routes / /motion.div /AnimatePresence ); }2. 滚动动画// 使用Intersection Observer实现滚动动画 const observer new IntersectionObserver((entries) { entries.forEach(entry { if (entry.isIntersecting) { entry.target.classList.add(animate-in); observer.unobserve(entry.target); } }); }); // 观察元素 document.querySelectorAll(.animate-on-scroll).forEach(el { observer.observe(el); });3. 微交互// 按钮点击效果 const button document.querySelector(.button); button.addEventListener(click, function(e) { // 创建波纹效果 const ripple document.createElement(span); const rect this.getBoundingClientRect(); const size Math.max(rect.width, rect.height); const x e.clientX - rect.left - size / 2; const y e.clientY - rect.top - size / 2; ripple.style.width ripple.style.height size px; ripple.style.left x px; ripple.style.top y px; ripple.classList.add(ripple); this.appendChild(ripple); setTimeout(() { ripple.remove(); }, 600); });性能优化使用 transform 和 opacity这两个属性不会触发重排性能更好避免使用 offsetTop 等布局属性这些属性会触发重排使用 will-change提前告诉浏览器元素将要发生变化使用 CSS 硬件加速通过 transform: translateZ(0) 或 transform: translate3d(0, 0, 0) 触发限制动画范围只对必要的元素应用动画使用 requestAnimationFrame确保动画在浏览器的动画帧中执行总结前端动画是提升用户体验的重要手段但需要合理使用。通过选择合适的动画技术和遵循最佳实践你可以创建既美观又高性能的动画效果。别再让你的页面像块木头一样僵硬了赶紧添加一些生动的动画吧

相关文章:

前端动画:别让你的页面像块木头一样僵硬

前端动画:别让你的页面像块木头一样僵硬 什么是前端动画? 前端动画是指在前端页面中添加的动态效果,让页面更加生动有趣。别以为动画只是花里胡哨的东西,好的动画可以提升用户体验,让你的应用脱颖而出。 为什么需要动画…...

上班族也能用的PTrade量化策略:沪深300增强版保姆级配置指南

上班族量化投资实战:PTrade沪深300增强策略全流程配置手册 每天早上9点挤地铁时刷财经新闻,总能看到沪深300指数又创新高的消息,心里盘算着"要是早点入场就好了"。但作为朝九晚六的上班族,既没时间盯盘,又怕…...

PP-DocLayoutV3企业应用:保险理赔单据——发票/病历/费用清单三类文档统一分析

PP-DocLayoutV3企业应用:保险理赔单据——发票/病历/费用清单三类文档统一分析 1. 引言:保险理赔的“信息迷宫”与破局之道 想象一下,你是一家保险公司的理赔审核员。每天,你的办公桌上堆满了来自不同医院、不同科室、不同格式的…...

系统接口文档

系统接口文档是软件开发中不可或缺的技术桥梁,它定义了不同模块或系统之间交互的规则与数据格式。无论是企业级应用还是互联网服务,清晰的接口文档能大幅提升协作效率,降低沟通成本。随着微服务架构和API经济的兴起,接口文档的价值…...

别再乱买线了!一文看懂Type-C接口的2脚、6脚、24脚区别(附选购指南)

别再乱买线了!一文看懂Type-C接口的2脚、6脚、24脚区别(附选购指南) 每次看到购物平台上琳琅满目的Type-C数据线,价格从9.9元包邮到299元不等,你是不是也犯过选择困难症?上周我帮朋友选购笔记本扩展坞时就踩…...

【书生·浦语】internlm2-chat-1.8b在中小企业客服场景落地:轻量级AI助手实操

【书生浦语】internlm2-chat-1.8b在中小企业客服场景落地:轻量级AI助手实操 1. 引言:中小企业客服的痛点与AI新解法 如果你是一家中小企业的老板或客服主管,下面这些场景你一定不陌生: 客服小王每天要重复回答几十遍“你们的产…...

永磁同步电机(PMSM)速度电流双闭环FOC矢量精细控制策略

永磁同步电机(PMSM)速度电流双闭环FOC矢量控制深夜实验室的示波器上跳动着杂乱的波形,老张盯着屏幕猛嘬了口烟:"这破电机咋就跟喝高了似的?"三个月前接手这个永磁同步电机控制项目时,他绝对没想到…...

Rust的#[repr(packed)]结构体

Rust语言中的#[repr(packed)]结构体是一个值得深入探讨的特性,它能够帮助开发者优化内存布局,特别适合对内存对齐有严格要求的场景。在嵌入式开发、网络协议解析等领域,精确控制结构体的内存排列至关重要。本文将带你了解#[repr(packed)]的独…...

GLM-OCR轻量级专业OCR模型:快速部署与网页界面使用指南

GLM-OCR轻量级专业OCR模型:快速部署与网页界面使用指南 你是不是经常需要从图片、扫描件或者PDF里提取文字?手动打字太慢,用在线工具又担心文件安全和次数限制。今天要介绍的GLM-OCR,就是一个能让你彻底告别这些烦恼的解决方案。…...

从硬件原理到软件中断:深入解析耳机插拔与按键检测的实现逻辑

1. 耳机接口的硬件基础:从三段式到四段式 第一次拆解耳机接口时,我被那些细小的金属环搞晕了头。后来发现,这些看似简单的结构藏着精妙的电路设计。最常见的3.5mm耳机接口分为三段式和四段式两种,就像USB-A和Type-C的区别&#xf…...

C++ 右值引用与程序优化

一、左值与右值基础概念1. 左值(Lvalue)定义:能取地址、可被修改(除非用const修饰)的表达式,有持久的生命周期。示例:int a 10; // a是左值,&a合法 const int b 20; // b是con…...

PostgreSQL运维实战:批量修改Schema下所有表Owner的三种方法(附完整脚本)

PostgreSQL运维实战:批量修改Schema下所有表Owner的三种方法(附完整脚本) 当数据库权限架构需要重构时,批量修改Schema下所有表的Owner是DBA常见的运维需求。本文将深入探讨三种实用方法,帮助你在生产环境中高效、安全…...

从PostGIS到GeoTools:自相交多边形的有效处理方案对比

1. 自相交多边形的常见问题与挑战 在地理信息系统(GIS)开发中,自相交多边形(Self-Intersecting Polygon)是个让人头疼的问题。想象一下,你画一个五角星,线条在中间交叉——这就是典型的自相交多…...

Rust的async-.await内部机制:状态机与Future trait

Rust的async/.await内部机制:状态机与Future trait Rust的async/.await语法为异步编程提供了简洁高效的解决方案,但其底层实现却隐藏着精妙的设计。理解其内部机制——状态机与Future trait,不仅能帮助开发者写出更高效的异步代码&#xff0…...

从零构建差速机器人MPC控制器:C++实现与OSQP实战

1. 差速机器人MPC控制入门指南 第一次接触差速机器人控制时,我被各种数学公式和算法绕得头晕。直到发现MPC(模型预测控制)这个神器,才真正体会到什么叫"用未来指导现在"的控制方法。简单来说,MPC就像下棋时提…...

【AI绘图进阶指南】Latent Diffusion Model核心组件解析——从理论到实践

1. 从像素到潜空间:Autoencoder如何重塑AI绘图 第一次接触Latent Diffusion Model(LDM)时,最让我困惑的就是:为什么要把好端端的图片压缩成看不懂的"潜空间"表示?后来在项目里踩过几次坑才明白&a…...

DAMOYOLO-S跨平台部署演示:从Ubuntu服务器到Windows客户端的全链路

DAMOYOLO-S跨平台部署演示:从Ubuntu服务器到Windows客户端的全链路 最近在做一个项目,需要把目标检测模型部署到不同的设备上,既要跑在云端服务器做批量处理,又要在本地Windows电脑上实时运行。试了好几个模型,要么部…...

惠普ZBook 15 G2黑苹果双屏实战:EDID提取+Clover注入保姆级教程(附亮度调节技巧)

惠普ZBook 15 G2黑苹果双屏配置全解析:从EDID提取到亮度优化 当专业用户尝试在惠普ZBook 15 G2上实现黑苹果双屏输出时,往往会遇到内屏无法正常管理的问题。这不仅影响工作效率,还会导致不必要的电量消耗和屏幕损耗。本文将深入探讨一套完整的…...

从防御者视角复盘:如果你的PHP代码像DVWA Low级一样写,会被黑客怎么‘爆’?

开发者必修课:当你的PHP代码沦为黑客的游乐场 想象一下这样的场景:你三年前写的PHP代码至今仍在线上运行,而某天突然发现数据库中的所有用户信息被黑客拖库。更可怕的是,攻击者利用的正是你当年随手写下的$id $_REQUEST[id];这样…...

如何用ExplorerPatcher打造终极Windows界面定制体验:5分钟快速上手完整指南

如何用ExplorerPatcher打造终极Windows界面定制体验:5分钟快速上手完整指南 【免费下载链接】ExplorerPatcher This project aims to enhance the working environment on Windows 项目地址: https://gitcode.com/GitHub_Trending/ex/ExplorerPatcher 你是不…...

避开Epic安装陷阱:从DirectX冲突到VC++运行库的终极修复指南

深度解析Epic游戏平台安装故障:从系统组件修复到环境配置的全方位指南 系统组件冲突的根源分析 当你在Windows系统上尝试安装Epic游戏平台时遇到"Windows Installer软件包问题"的错误提示,这通常意味着系统底层组件出现了兼容性或完整性故障。…...

Windows平台下基于CMake与VS2022的SOEM EtherCAT主站开发环境搭建指南

1. 环境准备:工欲善其事必先利其器 在Windows下玩转EtherCAT主站开发,首先得把工具链配齐。我当年第一次搭环境时,光是找齐这些工具就花了半天时间,现在把踩坑经验一次性打包给你。 必备三件套: Visual Studio 2022&am…...

手把手教你用StructBERT:中文句子相似度计算,智能匹配客服问题

手把手教你用StructBERT:中文句子相似度计算,智能匹配客服问题 1. 引言:为什么需要中文句子相似度计算 在日常工作和生活中,我们经常遇到需要判断两句话意思是否相似的情况。比如在客服系统中,用户可能会用不同的方式…...

VSCode Colab扩展挂载Google Drive失败?别急,这3个替代方案帮你搞定文件传输

VSCode Colab扩展挂载Google Drive失败?3种高效替代方案详解 当你在VSCode中使用Colab扩展时,是否遇到过无法挂载Google Drive的困扰?这个问题确实让许多依赖云端存储的开发者和数据科学家感到头疼。本文将深入分析问题根源,并提供…...

GPU算力适配优化:Pixel Epic智识终端在A10/A100/V100上的部署差异

GPU算力适配优化:Pixel Epic智识终端在A10/A100/V100上的部署差异 1. 引言:当像素冒险遇上GPU算力 Pixel Epic智识终端作为一款融合游戏化体验与专业研究功能的创新工具,其核心的AgentCPM-Report大模型对GPU算力有着独特需求。不同型号的NV…...

Makefile -GNU和MakeFile关系(二)

跟我一起写Makefile 一、 GNU 到底是什么?(极简版) GNU 一套开源、免费、自由的软件生态系统 全称:GNU’s Not Unix(递归梗,意思“不是Unix,但像Unix”) 你可以把它理解成&#x…...

3分钟玩转fre:ac:你的音频格式翻译官

3分钟玩转fre:ac:你的音频格式翻译官 【免费下载链接】freac The fre:ac audio converter project 项目地址: https://gitcode.com/gh_mirrors/fr/freac 想象一下,你的音乐库就像一座多语言图书馆——有的书是英文(MP3)&am…...

大模型工程化容错已进入“毫秒级决策时代”:2024最新Gartner评估显示,仅17%企业具备实时语义健康度评估能力

第一章:大模型工程化容错与降级设计 2026奇点智能技术大会(https://ml-summit.org) 大模型服务在生产环境中面临高并发、硬件抖动、依赖服务超时等多重不确定性,容错与降级不再是可选项,而是系统可用性的基石。工程化实践需兼顾语义一致性、…...

Spring Boot 启动过程全解析

Spring Boot 启动过程全解析 Spring Boot作为Java开发中最流行的框架之一,其简洁的配置和快速的启动能力深受开发者喜爱。但你是否好奇过,一个Spring Boot应用究竟是如何从零开始完成启动的?本文将深入解析Spring Boot的启动过程&#xff0c…...

VLA 在微调之后,能遗忘到什么程度?上交CVPR‘26的工作给出了答案

点击下方卡片,关注“自动驾驶之心”公众号 戳我-> 领取自动驾驶近30个方向学习路线 作者 | Runhao Mao等 编辑 | 自动驾驶之心 本文只做学术分享,如有侵权,联系删文 >>自动驾驶前沿信息获取→自动驾驶之心知识星球 当自动驾驶技术逐…...