Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >膜拜!用最少的代码却实现了最牛逼的滚动动画!

膜拜!用最少的代码却实现了最牛逼的滚动动画!

原创
作者头像
程序员老鱼
发布于 2022-11-27 12:28:40
发布于 2022-11-27 12:28:40
3.3K00
代码可运行
举报
文章被收录于专栏:前端实验室前端实验室
运行总次数:0
代码可运行

哈喽 大家好,我是老鱼。

gzh:老鱼的储物柜

今天老鱼带领大家学习如何使用最少的代码创建令人叹为观止的滚动动画~

在聊ScrollTrigger插件之前我们先简单了解下GSAP

GreenSock 动画平台 (GSAP) 可为 JavaScript 可以操作的任何内容(CSS 属性、SVG、React、画布、通用对象等)动画化,并解决不同浏览器上存在的兼容问题,而且比 jQuery快 20 倍。大约1000万个网站和许多主要品牌都在使用GSAP。

接下来大师兄带领大家一起学习ScrollTrigger插件的使用。

插件简介

ScrollTrigger是基于GSAP实现的一款高性能页面滚动触发HTML元素动画的插件。

通过ScrollTrigger使用最少的代码创建令人叹为观止的滚动动画。我们需要知道ScrollTrigger是基于GSAP实现的插件,ScrollTrigger是处理滚动事件的,而真正处理动画是GSAP,二者组合使用才能实现滚动动画~

插件特点

  • 将任何动画链接到特定元素,以便它仅在视图中显示该元素时才执行该动画。
  • 可以在进入/离开定义的区域或将其直接链接到滚动栏时在动画上执行操作(播放、暂停、恢复、重新启动、反转、完成、重置)。
  • 延迟动画和滚动条之间的同步。
  • 根据速度捕捉动画中的进度值。
  • 嵌入滚动直接触发到任何 GSAP 动画(包括时间线)或创建独立实例,并利用丰富的回调系统做任何您想做的事。
  • 高级固定功能可以在某些滚动位置之间锁定一个元素。
  • 灵活定义滚动位置。
  • 支持垂直或水平滚动。
  • 丰富的回调系统。
  • 当窗口调整大小时,自动重新计算位置。
  • 在开发过程中启用视觉标记,以准确查看开始/结束/触发点的位置。
  • 在滚动记录器处于活动状态时,如将active类添加到触发元素中:toggleClass: "active"
  • 使用 matchMedia() 标准媒体查询为各种屏幕尺寸创建不同的设置。
  • 自定义滚动触发器容器,可以定义一个 div 而不一定是浏览器视口。
  • 高度优化以实现最大性能。
  • 插件大约只有6.5kb大小。

安装/引用

CDN

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<script src="https://cdnjs.cloudflare.com/ajax/libs/gsap/3.8.0/gsap.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/gsap/3.8.0/ScrollTrigger.min.js"></script>

ES Modules

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import { gsap } from "gsap";
import { ScrollTrigger } from "gsap/ScrollTrigger";

gsap.registerPlugin(ScrollTrigger);

UMD/CommonJS

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import { gsap } from "gsap/dist/gsap";
import { ScrollTrigger } from "gsap/dist/ScrollTrigger";

gsap.registerPlugin(ScrollTrigger);

简单示例

代码语言:txt
AI代码解释
复制
gsap.to(".box", {
  scrollTrigger: ".box", // start the animation when ".box" enters the viewport (once)
  x: 500
});

高级示例

代码语言:txt
AI代码解释
复制
let tl = gsap.timeline({
    // 添加到整个时间线 
    scrollTrigger: {
      trigger: ".container",
      pin: true,   // 在执行时固定触发器元素
      start: "top top", // 当触发器的顶部碰到视口的顶部时
      end: "+=500", // 在滚动 500 px后结束
      scrub: 1, // 触发器1秒后跟上滚动条
      snap: {
        snapTo: "labels", // 捕捉时间线中最近的标签
        duration: {min: 0.2, max: 3}, // 捕捉动画应至少为 0.2 秒,但不超过 3 秒(由速度决定) 
        delay: 0.2, // 从上次滚动事件开始等待 0.2 秒,然后再进行捕捉 
        ease: "power1.inOut" // 捕捉动画的过度时间(默认为“power3”) 
      }
    }
  });

// 向时间线添加动画和标签 
tl.addLabel("start")
  .from(".box p", {scale: 0.3, rotation:45, autoAlpha: 0})
  .addLabel("color")
  .from(".box", {backgroundColor: "#28a92b"})
  .addLabel("spin")
  .to(".box", {rotation: 360})
  .addLabel("end");

自定义示例

代码语言:txt
AI代码解释
复制
ScrollTrigger.create({
  trigger: "#id",
  start: "top top",
  endTrigger: "#otherID",
  end: "bottom 50%+=100px",
  onToggle: self => console.log("toggled, isActive:", self.isActive),
  onUpdate: self => {
    console.log("progress:", self.progress.toFixed(3), "direction:", self.direction, "velocity", self.getVelocity());
  }
});

接下来,我们一起来看使用ScrollTrigger可以实现怎样的效果吧。

image.png
image.png
image.png
image.png

利用ScrollTrigger可以实现很多炫酷的效果,还有更多示例及源代码,快去公众号后台回复滚动获取学习吧!也欢迎同学们和大师兄讨论哦~

<p>进了前端门,便是一家人</p><p>原创不易,点赞、留言、分享就是大师兄写下去的动力!</p>

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
常见的手写代码题集
要求是 yield 后面只能是 Promise 或 Thunk 函数,详见 es6.ruanyifeng.com/#docs/gener…
前端迷
2020/02/19
7240
2篇搞定CSS基础知识----第二篇
padding-top(上内边距),padding-right(右内边距),padding-bottom(下内边距),padding-left(左内边距)
Lemon黄
2019/10/22
4220
2篇搞定CSS基础知识----第二篇
【CSS3】CSS3 2D 转换 - translate 平移 ( transform: translate 样式 | 百分比移动相对于元素自身尺寸 | 百分比移动实现绝对定位的居中效果 )
CSS3 中的 Transform 转换 , 可以实现 标签元素 的 位移 / 旋转 / 缩放 ;
韩曙亮
2023/04/24
1.2K0
【CSS3】CSS3 2D 转换 - translate 平移 ( transform: translate 样式 | 百分比移动相对于元素自身尺寸 | 百分比移动实现绝对定位的居中效果 )
CSS进阶内容—浮动和定位详解
当然如果没有学习之前的知识,可以到我的主页中查看之前的文章:秋落雨微凉 - 博客园
秋落雨微凉
2022/10/25
2.3K0
CSS进阶内容—浮动和定位详解
如何迅速熟练掌握盒子模型?(学习方法很重要)
----在前面文章冲浪笔记4中仅对盒子模型进行介绍,感兴趣的小伙伴也可以去看看,这篇文章将具体描述,并推荐一个自己觉得好用的记忆方法,喜欢的小伙伴可以收藏🧐常用到的:①居中效果margin: auto;②圆角border-radius: 10px;③三合一边框boder: 10px solid red;----一、概念1、CSS假定每⼀个标签都是⼀个矩阵,围绕着这个矩阵,从内到外展开⼀系列的属性来描述它2、组成:content、padding、boder、margin二、记忆方法1、俯视一个完整的篮球场,篮
申小兮
2023/04/07
2580
如何迅速熟练掌握盒子模型?(学习方法很重要)
五. css 布局之 position(定位)
包含块( containing block ) 正常情况下: 包含块就是离当前元素最近的祖先块元素,
小海怪的互联网
2020/10/26
2.3K0
CSS 制作爱心
方案1 纯CSS+HTML 代码 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <title>Document</title> <style>
无道
2019/11/13
1.1K0
CSS 制作爱心
HTML基础第四课(冲浪笔记4)
概念:CSS假定每⼀个标签都是⼀个矩阵,围绕着这个矩阵,从内到外展开⼀系列的属性来描述它,这⼀系列就被称为【盒⼦模型】
申小兮
2022/10/14
4180
HTML基础第四课(冲浪笔记4)
零基础学前端开发技术之第七章 浮动塌陷
张哥编程
2024/12/19
860
css笔记 - 张鑫旭css课程笔记之 margin 篇
relative可定位,但是不改变容器尺寸和占据的空间 margin不同,margin也在盒模型中。 从border开始往里边,是可视尺寸clientWidth部分。 加上margin,是占据尺寸outerWidth margin可以改变元素尺寸,正值宽度变小,负值宽度变大。 margin也可以定位
xing.org1^
2018/09/20
2.7K0
css笔记 - 张鑫旭css课程笔记之 margin 篇
剖析一些经典的CSS布局问题,为前端开发+面试保驾护航
这样做的优点就是在图文混排的时候可以很好的使文字环绕在图片周围。另外当元素浮动了起来之后,它有着块级元素的一些性质例如可以设置宽高等,但它与inline-block还是有一些区别的,第一个就是关于横向排序的时候,float可以设置方向而inline-block方向是固定的;还有一个就是inline-block在使用时有时会有空白间隙的问题
桃翁
2019/11/09
1.2K0
剖析一些经典的CSS布局问题,为前端开发+面试保驾护航
CSS布局之需要掌握的小技巧
vertical-align属性对于inline元素、inline-block元素和table-cell元素有效,对块元素无效。
xinxin-l
2022/03/29
4280
CSS布局之需要掌握的小技巧
前端面试 【CSS】— 让元素垂直居中的方法有哪些?
如何让元素垂直居中?这是一道很常见的面试题,大致有以下5种: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>让元素垂直居中的方法有哪些
越陌度阡
2021/11/11
6830
css3的一些新属性总结
box-sizing规定了盒子的计算方式,常用于消除hover时,盒子之间的影响,有三个属性:
一个淡定的打工菜鸟
2018/09/06
3920
CSS&HTML面经专题——(三)CSS定位/盒模型/经典布局/浮动布局与BFC
position:static | relative | absolute | fixed | center | page | sticky
玖柒的小窝
2021/10/26
2.1K0
CSS&HTML面经专题——(三)CSS定位/盒模型/经典布局/浮动布局与BFC
【CSS3】css开篇基础(5)
轻量级:一个图标字体比一系列的图像要小,一旦字体加载了,图标就会马上渲染出来,减少了服务器的请求
E绵绵
2024/10/27
2250
【CSS3】css开篇基础(5)
配合JQuery练习
<!-- <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <script type="text/javascript" src="http://ajax.microso
仇诺伊
2018/09/12
9220
网络编程(五)之HTML5和CSS3提高
HTML5 的新增特性主要是针对于以前的不足,增加了一些新的标签、新的表单和新的表单属性等。
前端小tips
2021/12/06
1.4K0
网络编程(五)之HTML5和CSS3提高
HTML常用布局方式
前言:对HTML的学习,在了解了基础的语法之后,需要学习与掌握的是,HTML的基础布局方式,这个是网页布局的基础,本文讲解是当前常用布局。
GeekLiHua
2025/01/21
2510
HTML常用布局方式
八.CSS之animation(动画)
​ 多个属性间使用,隔开 ​ 如果所有属性都需要过渡,则使用all关键字 ​ 大部分属性都支持过渡效果,注意过渡时必须是从一个有效数值向另外一个有效数值进行过渡(auto不是有效数值,过渡动画效果不会生效)
小海怪的互联网
2020/11/24
1.5K0
推荐阅读
相关推荐
常见的手写代码题集
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验