box5
进入(第一次进入)视口gsap.to(".box2", { scrollTrigger: ".box5", //当出现这个dom的时候, .box2 会向x移动500px, 类似于一个触发器 x: 500 });
let t1 = gsap.timeline({ scrollTrigger: { trigger: ".box5", }, }); t1.to('.box4', {x: 100, duration: 1})
scrollTrigger: { start:100// 滚动条移动的100px时候触发 },
scrollTrigger: { trigger: ".box11", start: "center bottom",// 在.box11 中间的位置开始滚动 // 标记设置 markers: true, scrub: true, }, 'top top' 当盒子移动到视口顶部的位置开始执行 'top center' 这个表示当盒子移动到视口中间的位置开始执行
.box11为触发器的盒子, start是触发滚动动画开始的位置,两个绿色的标记线 第一个参数, 默认指定dom的0%也就是top 第二个参数, 默认滚条的100% 也就是bottom end是触发滚动动画结束的位置, 两个红色的标记线 第一个参数, 默认指定dom的100% 也就是bottom 第二个参数, 默认滚动条的0% 也就是top 滚动条的意思, 不是移动的距离, 而且当前页面100%的长度,打个刻度, 跟dom 对应的重合到一起 介绍了滚动条刻度的规则, start 的刻度要大于end的刻度
markers:true 或者对象的形式 /*标注样式设置*/ markers:{ /*开始的颜色*/ startColor:'#2e00f8', /*结束的颜色*/ endColor:'#00d9ff', /*字体大小*/ fontSize:'40px', /*距离一侧的位置*/ indent:20, } 秒一样源码中的默认设置 _markerDefaults = { startColor: "green", endColor: "red", indent: 0, fontSize: "16px", fontWeight: "normal" }
gsap.to('.box4', { x: 500, rotation: 360, scrollTrigger: { trigger: '.box4', scrub: true, markers: true, end:'0% 40%' // start end 根据根据markers 显示的刻度进行调整 } })
第二种写法
const anim = gsap.to(".c", { x: 400, rotation: 360, duration: 3 }); ScrollTrigger.create({ trigger: ".box5",// 当.box5 出现时候触发 animation: anim });
toggleActions
toggleActions: "play pause resume reset"
进入时会播放(play)动画,离开时会暂停(pause),再次向后进入时会继续播放(resume),,,,,,,,,,,,, 当一直滚动回到起点是重置(reset) 可以使用的关键词 “play”、“pause”、“resume”、“reset”、“restart”、“complete”、“reverse”和“none”
ScrollTrigger.defaults({ toggleActions: "play pause resume reset" // 进入时,播放,离开时暂停,再次进入继续播放,直到最后重置 }); gsap.to(".box5", { scrollTrigger: ".box5", duration: 4, rotation: 360 });
在cssPlugin
的帮助下, gsap 可以机会任何css相关的dom元素设置属性
gsap.to('.box',{ duration:4, rotation:180, scaleX:.2 })
gsap.from(".line", { scrollTrigger: { trigger: ".line", scrub: true, start: "top bottom", end: "top top", markers: true, }, scaleX: 0, transformOrigin: "left center", // 移动的圆点从长度: left, 高度: 中 ease: "none" // 去掉默认的速度函数 });
<div class="line"></div> .line{ width: 100%; max-width: 800px; height: 8px; margin: 0 0 10px 0; position: relative; display: inline-block; background-color: rgb(200, 130, 130); }
gsap.from(".line2", { scrollTrigger: { trigger: ".box2", scrub: true, pin: true,// 在.box2的外层的盒子加个盒子`.pin-spacer` start: "top top", end: "+=100%", // 因为直接有个参数, 所以滚动条的开始标记和结束标记都是top markers: true, }, scaleX: 0, transformOrigin: "left center", ease: "none" });
<div style="height: 100vh;background-color: lightpink;" class="box2"> <div class="line2"></div> </div>
主要的设计师end:"+=100%"
var tl = gsap.timeline({ scrollTrigger: { trigger: ".purple", scrub: true, pin: true, start: "top top", end: "+=100%" } }); tl.from(".purple p", {scale: 0.3, rotation:45, autoAlpha: 0, ease: "power2"}) // autoAlpha:0 淡入淡出 0 隐藏 , visibility:hidden .from(".line3", {scaleX: 0, transformOrigin: "left center", ease: "none"}, 0) .to(".purple", {backgroundColor: "#28a92b"}, 0);
当ScrollTrigger激活时,你可以固定一个元素,这样当滚动位置在开始和结束元素/值之间时,它就会固定在原地
pin:true 就是自身元素 pin:'.xxx' 就是指定的元素
起到的作用是, 滚动固定的作用
ScrollTrigger.create({ trigger: "#orange", start: "top top", end: "bottom 150px", // 150px滚动条的长度 pin: "#orange-content",// 就也是固定的内容的部分 markers:true });
ScrollTrigger.create({ trigger: "#red", start: "top center", end: "+=200", // 超过开始200px pin: "#red-content", markers:true });
onEnter
- 向前越过“start”(通常在触发器滚动到视图时)
onLeave
- f向前越过"end"(通常在触发器滚动出视图时)
onEnterBack
- 向后过去“end”(通常当触发器滚动回视图时)
onLeaveBack
-向后过“start”(通常当触发器向后淡出视图时)
onUpdate
- 每次滚动位置变化,而在“开始”和“结束”之间。
onToggle
- 在任意方向传递开始或结束
onRefreshInit
-在测量值重新计算之前(通常在调整大小时)
onRefresh
-在重新计算测量值之后(通常在调整大小时)
const animation = gsap.from(".line-1", { scaleX: 0, transformOrigin: "left center", ease: "none" }); const logRed = (text: any, e: any = 1) => { console.log(text, e); } ScrollTrigger.create({ trigger: ".red", start: "top 100px", end: "bottom bottom-=100px", // 滚动条刻度100px开始, 滚动条-100px的位置结束 markers: true, scrub: true, animation: animation, onEnter: () => logRed("越过start这根线"), onLeave: () => logRed("越过end这根线"), onEnterBack: () => logRed("返回越过end这根线"), onLeaveBack: () => logRed("返回越过start这根线"), onRefresh: (e: any) => logRed("默认执行两次", e), // onUpdate: self => redProgress.innerText = "progress: " + self.progress.toFixed(3) onUpdate: (self: any) => { // 更新的值 console.log(self); console.log(self.progress.toFixed(3)); } });
如果通过 setPin 方法固定某个元素,默认情况下,场景元素下方将出现空白,且随着网页的滚动而被向下推压的场景元
使用 ScrollMagic.js 滚动时播放音频元素 http://www.qianduanheidong.com/blog/article/317665/587ddcad335e52dce6a9/ letscenes=[];//initcontrolle
//Notrecommendedx:50%,y:50%,//RecommendedxPercent:50,yPercent:50//Therightmethodx:100,y:300,xPercent:50,yPercent:50 简单使用,相当于页面加载完