基于fullpage.js实现滚动到指定区域触发Lottie动画求助
嘿,作为JS新手能把fullpage.js和Lottie动画结合起来已经超棒啦!要实现「滚动到对应区块才触发动画」的效果,核心就是利用fullpage的滚动回调事件来控制Lottie的播放时机。我给你整理了完整的实现方案,一步步来,很容易上手:
实现滚动触发Lottie动画的完整方案
1. 先搭好基础结构与依赖
首先确保你的HTML里引入了所需依赖,并且给带动画的section加上Lottie容器:
<!-- 引入依赖文件(替换成你自己的文件路径) --> <link rel="stylesheet" href="fullpage.min.css"> <script src="jquery.min.js"></script> <script src="fullpage.min.js"></script> <script src="lottie.min.js"></script> <!-- fullpage页面结构 --> <div id="fullpage"> <div class="section" data-anchor="startseite">首页</div> <!-- 带Lottie动画的区块 --> <div class="section" data-anchor="pers_vermittler"> <div id="lottie-vermittler" class="lottie-box"></div> </div> <div class="section" data-anchor="team">团队</div> <!-- 其他section按你的需求继续添加 --> </div>
2. 初始化Lottie动画(默认暂停)
先把要触发的Lottie动画初始化好,关键要设置autoplay: false,这样页面加载时动画不会自动播放,等滚动到对应区块再触发:
// 用对象存储Lottie实例,方便后续统一管理 const lottieAnims = {}; // 初始化第一个动画 lottieAnims.vermittler = lottie.loadAnimation({ container: document.getElementById('lottie-vermittler'), renderer: 'svg', // 可选svg/canvas/html,svg兼容性最好 loop: false, // 若需要循环播放设为true,这里滚动一次播放一次设为false autoplay: false, // 核心:默认不自动播放 path: 'your-animation-file.json' // 替换成你的Lottie动画JSON文件路径 }); // 如果有多个动画,同理初始化: // lottieAnims.team = lottie.loadAnimation({...});
3. 配置fullpage.js的回调触发动画
利用fullpage的afterLoad回调——这个函数会在滚动到某个section并加载完成后自动触发,我们可以通过锚点或序号判断当前区块,然后播放对应的动画:
$(document).ready(function($) { 'use strict'; $('#fullpage').fullpage({ sectionsColor: ['white', '#004E8A', 'white','#004E8A', 'white', '#004E8A', 'white','#004E8A', 'white'], anchors: ['startseite','pers_vermittler','team','konzept','rechner','mod_portfolio','sicherheit','...'], // 补全你的锚点列表 // 滚动到目标section后的回调 afterLoad: function(anchorLink, index) { // 通过锚点判断当前区块,触发对应动画 switch(anchorLink) { case 'pers_vermittler': // 从第0帧开始播放,第二个true表示强制重置动画(避免重复滚动时动画已经播完) lottieAnims.vermittler.goToAndPlay(0, true); break; case 'team': // 如果team区块有动画,同理触发 // lottieAnims.team.goToAndPlay(0, true); break; // 其他需要触发动画的区块继续添加case } }, // 可选:如果滚动离开区块时需要重置动画,用onLeave回调 onLeave: function(index, nextIndex, direction) { // 比如离开pers_vermittler区块时重置动画(index从1开始计数) if(index === 2) { lottieAnims.vermittler.goToAndStop(0, true); } } }); });
新手友好的关键知识点
lottie.loadAnimation()返回的实例可以用来控制播放、暂停、重置,用对象存储能避免全局变量混乱;goToAndPlay(0, true):确保每次滚动到区块时,动画都从开头重新播放;- fullpage的
afterLoad参数里,anchorLink是当前区块的锚点(和你设置的anchors数组对应),用锚点判断比序号更直观,不容易出错; - 如果动画没触发,先检查控制台有没有报错,确认Lottie的JSON路径、fullpage的锚点是否和HTML里的
data-anchor一致。
内容的提问来源于stack exchange,提问作者Enrico Bühler
相关产品推荐
相关产品推荐

