前端相关动画库(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

(第二篇)Spring AI 实战进阶:从 0 搭建 SaaS 模式多租户 AI 客服平台(核心难点 + 性能优化全解析)

(第二篇)Spring AI 实战进阶:从 0 搭建 SaaS 模式多租户 AI 客服平台(核心难点 + 性能优化全解析)

前言 随着 AI 大模型技术的普及,智能客服已成为企业降本增效的核心工具,但传统的单租户 AI 客服系统无法满足 SaaS 平台的规模化需求 —— 不同租户需要独立的模型配置、数据隔离、流量管控,同时还要保证高并发下的性能稳定性。 笔者近期主导了基于 Spring AI 的多租户 AI 客服 SaaS 平台开发,踩遍了多租户模型隔离、缓存隔离、流量控制、高并发优化等核心坑点。本文将从实战角度,完整拆解 SaaS 模式 AI 客服平台的开发全流程:从架构设计到核心难点突破,从功能实现到性能压测优化,所有代码均为生产环境可直接复用的实战代码,同时结合可视化图表清晰呈现核心逻辑,希望能给做 AI SaaS 开发的同学提供有价值的参考。 一、项目背景与架构设计 1.1 项目定位与核心需求 项目定位:SaaS 模式的智能客服解决方案,支持多企业租户接入,每个租户可自定义

AI赋能视频创作:蓝耘MaaS与海螺AI技术的深度融合

AI赋能视频创作:蓝耘MaaS与海螺AI技术的深度融合

云边有个稻草人-ZEEKLOG博客 目录 一、蓝耘MaaS平台概述 (1)平台的模块化设计 (2)蓝耘MaaS的灵活性与扩展性 (3)蓝耘MaaS的安全性与隐私保护 二、海螺AI视频模型简介 (1)海螺AI的核心技术 (2)海螺AI的视频生成流程 (3)海螺AI的应用场景 三、在蓝耘Maas平台如何使用海螺AI生成视频 (1)注册蓝耘平台账号 (2)点击MaaS平台 (3)点击视觉模型并选择l2V-01视频模型 (4)体验图片生成视频  四、蓝耘MaaS平台与海螺AI视频模型的结合 (1)高效集成:API调用示例 (2)高级视频生成:基于用户输入的多样化场景和交互 (3)高效视频渲染与优化 正文开始—— 一、蓝耘MaaS平台概述 蓝耘MaaS(Model as a Service)平台是一个基于云端的人工智能服务平台,通过开放API接口和SDK,用户可以轻松调用平台上的AI模型,而无需深入了解底层算法和模型细节。

软件著作权申请模板大全 (2025最新):含设计说明书、源代码、合作协议、人工智能合规申明等全套材料下载(网盘)

软件著作权申请模板大全 (2025最新):含设计说明书、源代码、合作协议、人工智能合规申明等全套材料下载(网盘)

软件著作权申请流程繁琐,材料准备耗时费力,尤其是对于首次申请的开发者而言 设计说明书不知道怎么写?合作开发协议没范本?AI相关的项目合规声明更是无从下手?本文为你提供了一套 2025年最新、最全的软件著作权申请模板,覆盖从个人开发者到合作企业、从传统软件到AIGC应用的全场景。所有模板均提供下载,让你告别文书烦恼,专注于代码本身。 一、用这份模板:拒绝踩坑 软件著作权(软著)是很多项目上架、申报、融资的必备条件。但在申请过程中,开发者常常会遇到以下痛点: * 材料繁杂:官方要求文档众多,格式要求严格,容易遗漏或出错。 * 耗时费力:从零开始撰写设计说明书、源代码文档等,极其消耗时间和精力。 * 缺乏范例:尤其是合作开发协议、非职务开发声明等法律文件,没有专业范本很容易留下隐患。 * 新兴领域难题:涉及到AIGC(人工智能生成内容)的项目,其合规性声明更是让许多人摸不着头脑。 本套模板就是为了解决以上所有问题而生,让你一次性备齐所有材料,大大提高申请成功率,并且不设门槛,免费分享! 二、模板库内容全览 我们提供的压缩包内包含了以下所有关键文件,均为最新版标准格式:

7D-AI系列:AI 编程 Spec Coding 完整详细的典型标准化工作流

文章目录 * 前言 * 一、核心前提:什么是「Spec(规格)」?Spec的核心要求 * ✅ Spec的定义 * ✅ Spec的核心要求(重中之重,决定代码质量) * ✅ Spec的常见载体(按优先级排序,工业界高频使用) * 二、Spec Coding 标准完整工作流(6个核心阶段) * ✅ 核心原则 * 阶段1:需求拆解 & 范围界定(前置准备,耗时占比:10%) * 阶段2:编写精准的结构化Spec(核心核心,耗时占比:30%,最关键) * 阶段3:AI 代码生成(核心提效环节,耗时占比:5%) * 阶段4:人工评审 + 静态校验(第一道质检,耗时占比:15%,过滤80%的问题) * 阶段5:自动化测试