前端相关动画库(GSAP/Lottie/Swiper/AOS)

前端相关动画库(GSAP/Lottie/Swiper/AOS)

GSAP的ScrollTrigger和SplitText动画

resources | GSAP | Docs & Learninghttps://gsap.com/resources/GSAP Showcasehttps://gsap.com/showcase/GSAP on CodePenhttps://codepen.io/GreenSockGSAP在CodePen中的千种Demo

CDN:

<script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/gsap.min.js"></script> <script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/ScrollTrigger.min.js"></script> <script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/SplitText.min.js"></script>

ScrollTrigger部分用法

gsap.registerPlugin(ScrollTrigger); ScrollTrigger.create({ trigger: '.pic', //用选择器选择触发元素 start: 'top top', //元素到达视口的最上方开始 //start: 'top 80%', //元素到达视口的80%开始 end: '+=2000', //往下移动2000px结束 scrub: true, //与滚动条绑定在一起,实现往返 markers: true,//开启标注 pin:true,//固定页面不岁滚动条滚动(关键) pinSpaceing:true//自动根据end属性添加的距离创建空白,使得上下两个页面衔接介绍https://codepen.io/JasonDuquain/pen/oNxvWjJ // 添加动画 animation: gsap.timeline()//使用时间线,用于管理多个动画的先后顺序,">"表示上一个动画结束开始,"<"是与上一个动画一起开始 .fromTo(".pic4", { width: "18.75em" }, { width: "16.75em" }, ">") .fromTo(".pic1", { left: "55.125em" }, { left: "14.3em" }, "<") //fromTo("使用动画的元素",{元素起始状态},{元素结束状态}) });

常用属性

属性取值说明
start数字方位名词
end数字方位名词
triggerElementundefined
animationTweenTimeline
scrub布尔值数字
toggleClass字符串对象
markerstrue开启标注功能(更好看滚动开始以及截止的地方)
scrollerElementwindow
pinElementundefined
direction数字反映滚动的每时每刻方向,其中 1 表示向前, -1 表示向后
isActive布尔值如果滚动位置位于 ScrollTrigger 实例的开始位置和结束位置之间,则仅 true
horizontal布尔型设置使用水平滚动,则只需设置 horizontal: true
progress数字ScrollTrigger 实例的总体进度,其中 0 在开头,0.5 在中间,1 在末尾

SplitText文字分割动画

gsap.registerPlugin(SplitText, ScrollTrigger);//注册插件 document.fonts.ready.then(() => { gsap.set(".split", { opacity: 1 }); //快速设置所有 .split 元素的初始透明度为 1 const splitElements = document.querySelectorAll(".split");//获取页面中所有带有 .split 类的 DOM 元素 splitElements.forEach((element)=>{//遍历每一个容器 SplitText.create(element, { type: "words,lines", // 拆分类型:同时拆分为「单词」和「行」 mask: "lines", // 以「行」为掩码(限制),保证拆分后的单词不会超出所在行的范围 onSplit: (self) => { // 文字拆分完成后的回调函数(关键) // 拆分完成后,为所有拆分出的单词创建动画 gsap.from(self.words, { duration: 1.3, // 动画持续时间:1.3秒 y: 50, // 初始位置:在目标位置下方 50px 处(y 轴正方向为向下) opacity: 0, // 初始透明度:完全透明 stagger:{ // stagger:逐元素延迟动画,营造层次感 amount:0.6 // 所有单词完成动画的总延迟时间:0.6秒(平均分配给每个单词) }, scrollTrigger: { // 绑定滚动触发配置 trigger: element, // 滚动触发的目标元素:当前遍历的 .split 元素 start: "top 88%", // 动画开始触发时机:元素的「顶部」与视口的「88% 高度位置」重合时 end: "top 20%", // 动画结束时机:元素的「顶部」与视口的「20% 高度位置」重合时 } }); } }); }) }); 

AOS动画

https://github.com/michalsnik/aos?tab=readme-ov-filehttps://github.com/michalsnik/aos?tab=readme-ov-fileAOS - Animate on scroll libraryhttps://michalsnik.github.io/aos/

  • 用途:新页面出现时的动画效果(滚轮)
CDN(JS):<script src="[https://unpkg.com/[email protected]/dist/aos.js](https://unpkg.com/[email protected]/dist/aos.js)"></script> CDN(CSS):<link href="[https://unpkg.com/[email protected]/dist/aos.css](https://unpkg.com/[email protected]/dist/aos.css)" rel="stylesheet">

JS代码

AOS.init({ // 初始化AOS offset: 120, // 提前120px触发动画 delay: 0, // 无默认延迟 duration: 400, // 动画默认持续400ms easing: 'ease', // 默认缓动曲线 once: false, // 支持重复触发动画 mirror: false, // 滚动离开不执行反向动画 anchorPlacement: 'top-bottom' // 元素顶部对齐视口底部时触发 }); 

HTML代码(AOS使用方法)

 //直接在对应元素添加对应的类名即可,类名对应动画参考连接https://michalsnik.github.io/aos/ <div > </div>

Lottie动画

LottieFiles: Download Free lightweight animations for website & apps.https://lottiefiles.com/lottielab.com/dashboard/team/4c9411da-7606-4370-a845-c313fbd6acf2/homehttps://www.lottielab.com/dashboard/team/4c9411da-7606-4370-a845-c313fbd6acf2/homeLottie Air | Remove Watermark - Free Lottie Editorhttps://lottieair.com/可添加关键帧自定义动画,并导出JSON文件在web端使用

CDN:

CDN:<script src="[https://unpkg.com/[email protected]/build/player/lottie.min.js](https://unpkg.com/[email protected]/build/player/lottie.min.js)"></script>

HTML代码

<div></div>//自定义容器选择器名,设置显示动画的容器

JS代码

  • 显示动画
//获取显示动画的容器 const structe_one_container = document.getElementById('struct_picture'); // 加载并渲染动画 const structe_one_animation = lottie.loadAnimation({ container: structe_one_container, // 动画挂载的 DOM 容器(必填) renderer: 'svg', // 渲染模式(支持 'svg'/'canvas'/'html') loop: false, // 是否循环播放(布尔值/数字,数字表示循环次数) autoplay: false, // 是否自动播放(布尔值) path: 'structe_one.json', // Lottie 动画 JSON 文件路径(相对/绝对) }); 
  • 设置触发时间
 // 监听页面滚动,滚动到目标区域时播放动画 window.addEventListener('scroll', () => { const rect = structe_one_container.getBoundingClientRect();//关键是获取放置容器的元素的矩形属性 // 当动画容器进入视口(顶部 <= 窗口高度)时播放 if (rect.top <= window.innerHeight/1.5 && !structe_one_animation.isPlaying) { structe_one_animation.play(); //播放动画 } });

Swiper轮播图

swiperjs.com/demoshttps://swiperjs.com/demos

CDN(JS): <script src="[https://unpkg.com/swiper@8/swiper-bundle.min.js](https://unpkg.com/swiper@8/swiper-bundle.min.js)"></script> CDN(CSS):<link rel="stylesheet" href="[https://unpkg.com/swiper@8/swiper-bundle.min.css](https://unpkg.com/swiper@8/swiper-bundle.min.css)" />

HTML代码(类名要正确)

<div> <div> <!-- 轮播卡片 --> <div>Slide 1</div> <div>Slide 2</div> <div>Slide 3</div> ... </div> <!-- 分页器--> <div></div> <!-- 上下按钮--> <div></div> <div></div> <!-- 滚动条 --> <div></div> </div>

CSS代码控制分页器

.swiper-pagination-bullet-active background-color: #00E77F;:选中的小圆点背景色:青绿色(活力绿)
.swiper-pagination-bullet background-color: #fff;:未选中的小圆点背景色:白色

JS代码

  • 普通轮播效果
var swiper = new Swiper(".course-slider", {//指定那个类名设置swiper属性 spaceBetween: 20, // 轮播卡片之间的间距:20px(对应 CSS 的 gap,避免卡片重叠) grabCursor:true, // 鼠标交互:光标移到轮播上时变成“抓手样式”,提示可拖动 loop:true, // 循环轮播:滑到最后一张后,继续滑动会回到第一张(无边界) pagination: { // 分页器(小圆点)配置 el: ".swiper-pagination", // 分页器绑定的 DOM 元素(页面中需有这个类名的元素) clickable: true, // 分页器小圆点可点击,点击直接跳转到对应幻灯片 }, breakpoints: { 540: { // 屏幕宽度 ≥540px 时 slidesPerView: 1, // 每页显示1张卡片 }, 768: { // 屏幕宽度 ≥768px 时 slidesPerView: 2, // 每页显示2张卡片 }, 1024: { // 屏幕宽度 ≥1024px 时 slidesPerView: 3, // 每页显示3张卡片 }, }, });
  • 3D轮播效果
var swiper = new Swiper(".home-slider", { //初始化 Swiper 实例,绑定到类名为 .home-slider 的容器 effect: "coverflow", // 核心特效:封面流(Coverflow),模拟3D翻页/相册效果 grabCursor: true, // 交互优化:鼠标移到轮播上显示“抓手光标”,提示可拖动 centeredSlides: true, // 居中显示:当前激活的幻灯片始终在容器正中间(核心适配 coverflow 特效) slidesPerView: "auto", // 幻灯片数量:自动适配(根据屏幕宽度/幻灯片宽度自动调整显示数量) coverflowEffect: { // Coverflow 特效的精细配置(核心!控制3D效果的参数) rotate: 0, // 幻灯片旋转角度(0=不旋转,正数=顺时针,负数=逆时针) stretch: 0, // 幻灯片拉伸距离(0=不拉伸,越大越紧凑) depth: 100, // 3D深度(越大,远的幻灯片越靠后,3D效果越明显) modifier: 2, // 效果强度乘数(放大 rotate/stretch/depth 的效果) slideShadows: true // 是否显示幻灯片的阴影(增强3D层次感) }, loop:true, // 循环轮播:滑到最后一张后无缝回到第一张 autoplay:{ delay: 3000, // 自动切换间隔:3秒(3000毫秒) disableOnInteraction:false // 用户手动滑动后,仍继续自动轮播(默认true会停止) } });
  • 3D轮播效果(左右拖动图片与类别显示)
var lastActiveIndex = swiper2.activeIndex; //处于中心位置是的轮播图索引,用于判断拖动的左右方向 swiper2.on('slideChange', function() { //绑定 slideChange 事件,页面轮播时出发事件 var activeIndex = swiper2.activeIndex; var activeSlide = swiper2.slides[activeIndex]; var currentImage = activeSlide.querySelector('img'); let num = currentImage.id; //减一对应数组0索引 var current = document.getElementsByClassName("spc")[num[1]-1]; //左滑动并清空上一个 if(num[1]-2!=-1 && activeIndex > lastActiveIndex){ var prev = document.getElementsByClassName("spc")[num[1]-2]; prev.style.color = "black"; prev.style.backgroundColor="white" } else{//划到第一个清空最后一个 var prev = document.getElementsByClassName("spc")[5] prev.style.color = "black"; prev.style.backgroundColor="white" } //右滑动并清空上一个 if(num[1]!=6 && activeIndex < lastActiveIndex){ var prev = document.getElementsByClassName("spc")[num[1]]; prev.style.color = "black"; prev.style.backgroundColor="white" } else{//划到最后一个清空第一个 var prev = document.getElementsByClassName("spc")[0] prev.style.color = "black"; prev.style.backgroundColor="white" } lastActiveIndex = activeIndex; //存储上一个轮播图的索引,用于判断拖动方向 current.style.color = "white"; current.style.backgroundColor="black" });

Font-awesome图标字体工具

Font Awesomehttps://fontawesome.com/首页 - FontAwesome 字体图标中文Iconhttps://fontawesome.com.cn/

CDN:需在官网设置

CDN:<link rel="stylesheet" href="[https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.1.1/css/all.min.css](https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.1.1/css/all.min.css)" integrity="sha512-KfkfwYDsLkIlwQp6LFnl8zNdLGxu9YAA1QvwINks4PhcvqcyVLLD9aMhXd13uQjoXtEKNosOWaZqXgel0g==" crossorigin="anonymous" referrerpolicy="no-referrer" />
  • 用法:直接在html当中嵌入对应的<i></i>标签即可(可用font-size调整大小)
  • JS添加active类切换图标
let num_s = 0; sound.onclick = () =>{ num_s+=1; if(num_s%2==0){//音量图标 sound_icon.classList.remove('fa-volume-xmark') sound_icon.classList.add('fa-volume-high') video.muted = false; sbar.style.width=(video.volume * 100)+"%"; } else{//静音图标 sound_icon.classList.remove('fa-volume-high') sound_icon.classList.add('fa-volume-xmark') video.muted = true; sbar.style.width=0+"%"; } }

Read more

主流 AI IDE 之一的 OpenCode 介绍

主流 AI IDE 之一的 OpenCode 介绍

一、OpenCode 是什么简介         OpenCode 是一款开源、免费的 AI 编程助手工具(不包含服务端大模型),支持在终端(TUI)、桌面应用和 IDE 中使用,可替代 Claude Code、Cursor 等商业工具客户端。OpenCode 是一款开源的 AI 编程智能体,它能在终端、桌面应用或主流 IDE 中帮助你理解代码库、编写功能、重构代码和修复 Bug,从而大幅提升开发效率 1。截至目前(2026年02月01号),它拥有超过 80,000 个 GitHub 星标和每月超过 150 万开发者使用,是目前最受欢迎的开源 AI 编程工具之一。 1.1 核心特点         • 100% 开源:

OpenClaw漏洞预警:如何给AI代理加上“记录仪”?

OpenClaw漏洞预警:如何给AI代理加上“记录仪”?

近日,工信部网络安全威胁和漏洞信息共享平台、国家互联网应急中心连续发布风险提示:开源AI智能体OpenClaw因默认安全配置脆弱、不当配置等问题存在较高安全风险。 当AI代理被赋予系统级权限,每一次“幻觉”或攻击都可能酿成数据浩劫 而每一次操作在操作系统中留下的痕迹,正是追溯这些风险的关键线索。移动云云日志可为移动云云主机提供命令级、文件级全量日志采集,搭配智能关键词告警与日志长期存储,让云主机上的每一行指令都有迹可循,为AI应用构建日志可追溯的安全防线。 四大高危风险,不容忽视 OpenClaw作为开源AI智能体框架,在提升自动化能力的同时,其默认配置存在的安全漏洞可能被恶意利用,导致企业核心数据面临严重威胁。 “AI智能体的安全风险不在于AI本身,而在于我们能否看清AI在系统层面的每一个动作。看不见的风险才是真正的风险。” 而移动云云日志,就是要让这些“看不见”的风险,变得“看得见”。 四大核心能力,构建AI安全防线 全量行为采集,不留死角 支持主流操作系统(CentOS、Ubuntu、WindowsServer等),可采集Shell命令历史、文

私人 AI 随身带!OpenClaw+cpolar 外网访问完整教程

私人 AI 随身带!OpenClaw+cpolar 外网访问完整教程

前言 在人人都用 AI 的时代,拥有一台完全私有、本地运行、数据不泄露的私人 AI,已经成为很多人的刚需。OpenClaw 就是这样一款宝藏工具,可绝大多数人都用错了方式 —— 只把它放在家里电脑上,出门就用不了。结果就是:部署时兴致勃勃,用几天后慢慢闲置,明明花了时间搭建,却没能发挥一半价值。我自己踩过这个坑,也试过各种办法突破局域网限制,要么配置复杂,要么不稳定,直到遇见 cpolar。它能轻松把本地服务映射到公网,安全加密、多平台兼容、新手友好。把 OpenClaw 和 cpolar 组合在一起,就等于把私人 AI 装进口袋,上班、出差、旅行,只要有网就能用。这篇文章不讲难懂原理,只给可直接复制的操作,带你从零完成外网访问,让私人 AI 真正随身带、随时用。 1 OpenClaw和cpolar是什么?

很喜欢Vue,但还是选择了React: AI时代的新考量

很喜欢Vue,但还是选择了React: AI时代的新考量

引言 作为一个深度使用Vue多年的开发者,最近我在新项目技术选型时,却最终选择了React。这个决定不是一时冲动,而是基于当前技术发展趋势、AI时代的需求以及生态系统的深度思考。 AI时代的前端需求 随着人工智能技术的飞速发展,前端开发的需求也发生了深刻的变化。现代应用不仅仅是静态页面或简单的数据展示,而是需要与复杂的后端服务、机器学习模型以及第三方API深度集成。这些场景对前端框架提出了更高的要求,生态的重要性,不得不说很重要。 社区对AI的支持 说实话,React社区在AI领域简直就是"社交达人"。shadcn这样的明星UI库、vercel/ai这样的实力派SDK,都是圈子里的"网红"。想要快速搭建AI应用?这些"老铁"都能帮你省下不少力气。简单列举一些知名仓库。 @vercel/ai 这是由Vercel开发的AI SDK 提供了与各种AI模型(如OpenAI, Anthropic等)交互的统一接口 支持流式响应、AI聊天界面等功能 特别适合构建类ChatGPT应用 shadcn-admin 基于shadcn/ui的管理后台模板