将 Lottie 动画连接到 ScrollTrigger。
如果你在 After Effects 中创建了一个动画,并使用Lottie导出,那么你可以通过这个方便的函数将它与滚动位置关联起来,这样当用户滚动页面时,动画就会随之播放:
function LottieScrollTrigger(vars) {
let playhead = { frame: 0 },
target = gsap.utils.toArray(vars.target)[0],
speeds = { slow: "+=2000", medium: "+=1000", fast: "+=500" },
st = {
trigger: target,
pin: true,
start: "top top",
end: speeds[vars.speed] || "+=1000",
scrub: 1,
},
ctx = gsap.context && gsap.context(),
animation = lottie.loadAnimation({
container: target,
renderer: vars.renderer || "svg",
loop: false,
autoplay: false,
path: vars.path,
rendererSettings: vars.rendererSettings || {
preserveAspectRatio: "xMidYMid slice",
},
});
for (let p in vars) {
// let users override the ScrollTrigger defaults
st[p] = vars[p];
}
animation.addEventListener("DOMLoaded", function () {
let createTween = function () {
animation.frameTween = gsap.to(playhead, {
frame: animation.totalFrames - 1,
ease: "none",
onUpdate: () => animation.goToAndStop(playhead.frame, true),
scrollTrigger: st,
});
return () => animation.destroy && animation.destroy();
};
ctx && ctx.add ? ctx.add(createTween) : createTween();
// in case there are any other ScrollTriggers on the page and the loading of this Lottie asset caused layout changes
ScrollTrigger.sort();
ScrollTrigger.refresh();
});
return animation;
}
用法
LottieScrollTrigger({
target: "#animationWindow",
path: "https://assets.codepen.io/35984/tapered_hello.json",
speed: "medium",
scrub: 2, // seconds it takes for the playhead to "catch up"
// you can also add ANY ScrollTrigger values here too, like trigger, start, end, onEnter, onLeave, onUpdate, etc. See /docs/v3/Plugins/ScrollTrigger
});
演示
加载中...
特别感谢 Chris Gannon 所开发的工具,这是受其启发而实现的。工具,这是受到它的启发而开发的。