前端动画:别再用 jQuery animate 了

前端动画:别再用 jQuery animate 了

毒舌时刻

这动画效果做得跟幻灯片似的,一点都不流畅。

各位前端同行,咱们今天聊聊前端动画。别告诉我你还在使用 jQuery animate,那感觉就像在没有减震器的情况下开车——能开,但颠簸得要命。

为什么你需要现代前端动画

最近看到一个项目,动画效果卡顿,代码复杂难以维护。我就想问:你是在做动画还是在做卡顿展示?

反面教材

// 反面教材:使用 jQuery animate // index.html <!DOCTYPE html> <html> <head> <title>jQuery Animation</title> <script src="https://code.jquery.com/jquery-3.6.0.min.js"></script> <style> .box { width: 100px; height: 100px; background-color: red; position: relative; } </style> </head> <body> <div></div> <button>动画</button> <script src="app.js"></script> </body> </html> // app.js $(document).ready(function() { $('#animate').click(function() { $('.box').animate({ left: '200px', opacity: '0.5', height: '200px', width: '200px' }, 1000); }); }); 

毒舌点评:这动画,就像在看幻灯片,一点都不流畅。

正确姿势

1. CSS 动画

/* 正确姿势:CSS 动画 */ /* styles.css */ .box { width: 100px; height: 100px; background-color: red; position: relative; transition: all 0.3s ease; } .box:hover { transform: scale(1.2); background-color: blue; } .box.animate { animation: move 1s ease forwards; } @keyframes move { from { left: 0; opacity: 1; height: 100px; width: 100px; } to { left: 200px; opacity: 0.5; height: 200px; width: 200px; } } /* index.html */ <!DOCTYPE html> <html> <head> <title>CSS Animation</title> <link rel="stylesheet" href="styles.css"> </head> <body> <div></div> <button>动画</button> <script src="app.js"></script> </body> </html> /* app.js */ document.getElementById('animate').addEventListener('click', function() { const box = document.querySelector('.box'); box.classList.add('animate'); setTimeout(() => { box.classList.remove('animate'); }, 1000); }); 

2. Framer Motion

// 正确姿势:Framer Motion // 1. 安装依赖 // npm install framer-motion // 2. 基本使用 import React, { useState } from 'react'; import { motion } from 'framer-motion'; function App() { const [animate, setAnimate] = useState(false); return ( <div> <motion.div className="box" initial={{ x: 0, opacity: 1, height: 100, width: 100 }} animate={animate ? { x: 200, opacity: 0.5, height: 200, width: 200 } : {}} transition={{ duration: 1 }} whileHover={{ scale: 1.1, backgroundColor: 'blue' }} /> <button onClick={() => setAnimate(!animate)}> {animate ? '重置' : '动画'} </button> </div> ); } export default App; // styles.css .box { background-color: red; position: relative; } 

3. GreenSock Animation Platform (GSAP)

// 正确姿势:GSAP // 1. 安装依赖 // npm install gsap // 2. 基本使用 import React, { useRef, useEffect } from 'react'; import gsap from 'gsap'; function App() { const boxRef = useRef(null); const handleAnimate = () => { gsap.to(boxRef.current, { x: 200, opacity: 0.5, height: 200, width: 200, duration: 1, ease: 'power2.out' }); }; const handleReset = () => { gsap.to(boxRef.current, { x: 0, opacity: 1, height: 100, width: 100, duration: 1, ease: 'power2.out' }); }; return ( <div> <div ref={boxRef} className="box"></div> <button onClick={handleAnimate}>动画</button> <button onClick={handleReset}>重置</button> </div> ); } export default App; // styles.css .box { width: 100px; height: 100px; background-color: red; position: relative; } 

4. React Spring

// 正确姿势:React Spring // 1. 安装依赖 // npm install @react-spring/web // 2. 基本使用 import React, { useState } from 'react'; import { useSpring, animated } from '@react-spring/web'; function App() { const [animate, setAnimate] = useState(false); const styles = useSpring({ x: animate ? 200 : 0, opacity: animate ? 0.5 : 1, height: animate ? 200 : 100, width: animate ? 200 : 100, config: { duration: 1000 } }); return ( <div> <animated.div className="box" style={styles} /> <button onClick={() => setAnimate(!animate)}> {animate ? '重置' : '动画'} </button> </div> ); } export default App; // styles.css .box { background-color: red; position: relative; } 

毒舌点评:这才叫现代前端动画,流畅自然,代码简洁,再也不用担心动画卡顿和维护困难了。

Read more

开源AI神器OpenClaw(小龙虾)保姆级部署全解析:零付费、零代码,人人可上手的本地AI助手

在AI工具付费化趋势日益明显的当下,不少个人用户和中小企业被高昂的订阅费用挡在智能办公、高效创作的门外——无论是主流AI对话工具的月度订阅费,还是专业文件处理、自动化办公工具的年度付费套餐,长期使用下来都是一笔不小的开支。而OpenClaw(昵称“小龙虾”)的出现,彻底打破了这一壁垒——作为一款开源免费的全能AI助手,它支持本地部署、云端部署双重模式,无需用户具备任何专业编程基础,通过一键安装脚本就能快速完成部署,涵盖智能聊天交互、多格式文件处理、自动化办公、代码辅助等全场景实用功能,能够完美替代各类付费AI工具,让每一位用户都能零成本解锁AI生产力。 本文作为一篇原创专栏,将从当前AI工具市场的行业背景出发,结合笔者多次实战部署的经验,为大家带来OpenClaw从前期环境配置、多系统安装部署、初始化参数设置,到日常实战应用、进阶优化调试的保姆级全教程,同时深度解读其开源特性背后的技术优势与未来发展潜力,拆解部署过程中的关键细节和避坑要点,帮助每一位读者轻松上手,顺利完成部署,真正实现“零付费、零代码”玩转本地AI助手。 一、前言:为什么选择OpenClaw?开源AI的崛起与优势

用 Trae + Cline + 阿里云 Coding Plan 打造「零成本焦虑」的 AI 编程工作流

在 AI 编程工具爆发式增长的今天,开发者面临一个新问题:Token 账单失控。频繁调用大模型生成代码、解释错误、写测试用例,很容易导致费用飙升。 一、什么是阿里云 Coding Plan?——专为写代码而生! 根据 阿里云官方说明,Coding Plan 是面向开发者的专属大模型调用计划,具有以下特点: 🔹 每月 18,000 次 API 调用(Lite 版,¥40/月)活动期间好像还有折扣 🔹 单次调用不限 Token 数量 🔹 仅限用于「代码相关任务」的官方合作开发工具 🔹 不支持通用对话、智能体(Agent)、非代码类推理 ✅ 允许的使用场景(合规): * 在 VS Code / JetBrains 中使用 Cline、

Flutter 组件 google_generative_language_api 适配鸿蒙 HarmonyOS 实战:生成式 AI 集成,构建大语言模型调度与全场景智能推理治理架构

Flutter 组件 google_generative_language_api 适配鸿蒙 HarmonyOS 实战:生成式 AI 集成,构建大语言模型调度与全场景智能推理治理架构

欢迎加入开源鸿蒙跨平台社区:https://openharmonycrossplatform.ZEEKLOG.net Flutter 组件 google_generative_language_api 适配鸿蒙 HarmonyOS 实战:生成式 AI 集成,构建大语言模型调度与全场景智能推理治理架构 前言 在鸿蒙(OpenHarmony)生态迈向全场景 AI 赋能、涉及高效的语义理解、自动化内容生成及严苛的端云协同智能隐私保护背景下,如何实现一套既能深度对接 Google 生成式语言模型(如 Gemini、PaLM)、又能保障异步请求高响应性且具备多模态输入处理能力的“AI 调度中枢”,已成为决定应用智能化水平与用户体验代差的关键。在鸿蒙设备这类强调分布式协同与端侧算力按需分配的环境下,如果应用依然采用低效的 REST 手写拼接,由于由于 payload 结构复杂性,极易由于由于“协议解析异常”导致鸿蒙应用在大模型推理环节发生由于由于由于由于通讯阻塞。 我们需要一种能够统一模型调用语义、支持流式(Streaming)响应且符合鸿蒙异步异步并发范式的

Trae 高峰排队太难受?让 AI 编码从此告别等待!

手把手教你配置无问芯穹,享受丝滑 AI 编程体验 最近在使用 Trae 进行 AI 辅助编程时,遇到了一个让人抓狂的问题——高峰期模型排队。相信很多 Trae 用户都有同感,当灵感迸发想要快速实现一个功能时,却要面对“前方排队 X 人的提示,这感觉就像写代码写到一半突然断网一样难受。 今天,我就来教大家如何通过接入无问芯穹这个强大的 AI 聚合厂商,彻底解决这个痛点。文章最后还有专属福利,千万别错过! 痛点:Trae 高峰期的“模型春运” Trae 作为一款优秀的 AI 编程助手,用户量增长非常快。每天下午和晚上,尤其是工作日的 14:00-17:00可以说是模型调用的“高峰期”。 当你遇到以下场景时: * 调试一段怎么也找不到 bug 的代码 * 想要重构一个冗长的模块 却只能对着屏幕干等,那种感觉真的很影响开发效率。排队等待不仅打断了思路,