欢迎您访问新疆栾骏商贸有限公司,公司主营电子五金轴承产品批发业务!
全国咨询热线: 400-8878-609

新闻资讯

技术学院

如何精准控制 Lottie 预加载动画:仅在首次访问、刷新或外链进入首页时触发

作者:花韻仙語2026-01-10 00:00:00

本文提供一套健壮、兼容性良好的 javascript 方案,通过 performance.getentriesbytype('navigation') 结合 document.referrer 精准识别页面进入方式(外链跳转、地址栏输入、手动刷新),并排除内部导航与历史回退,确保 lottie 预加载动画仅在目标场景下执行。

在构建单页应用或现代多页网站时,为首页添加一个轻量级 Lottie 预加载动画能显著提升首屏感知性能与品牌体验。但关键挑战在于:动画必须智能触发——仅当用户真正“初次抵达”首页时显示,而非每次路由跳转都重复播放。本文将为你实现这一精准控制逻辑。

核心判断逻辑

现代浏览器的 PerformanceNavigationTiming API(通过 performance.getEntriesByType('navigation') 获取)提供了可靠的页面导航类型标识:

  • 'navigate':通过点击链接、书签、表单提交、脚本跳转或直接在地址栏输入 URL 触发;
  • 'reload':用户点击刷新按钮或调用 location.reload();
  • 'back_forward':使用浏览器前进/后退按钮;
  • 'prerender':页面被预渲染(较少见,可按需处理)。

⚠️ 注意:window.performance.navigation 已废弃(自 Chrome 90+ 起),必须优先使用 getEntriesByType('navigation'),否则将导致兼容性问题或误判。

区分内外链的关键:document.referrer

navigation.type === 'navigate' 本身无法区分是站内链接还是外部跳转。此时需结合 document.referrer:

  • 若 referrer 包含当前域名(location.hostname),大概率是站内导航(如从 /about 点击链接跳转至 /);
  • 若不包含,则属于外部来源(如 Google 搜索结果、微信公众号、其他网站链接)或地址栏直输(此时 referrer 为空字符串)。

✅ 地址栏输入时 document.referrer === '',自然满足 indexOf(hostname) === -1,因此无需额外分支判断。

完整可运行代码(含防抖与 DOM 就绪保障)






  


重要注意事项

  • $(document).ready() 是必需的:确保 DOM 渲染完成后再操作 #preloader 和 body 类,避免因元素未就绪导致样式失效或动画初始化失败。
  • 滚动重置要谨慎:window.scrollTo(0,0) 在 load 事件中可能被浏览器默认行为覆盖,故采用 scrollBehavior: 'auto' 临时禁用平滑滚动,强制瞬时跳转顶部。
  • 移动端兼容性:该方案在 iOS Safari、Chrome Android、Firefox 等主流移动浏览器中均验证有效。
  • SEO 友好:预加载器包裹在 中,初始可见;动画结束后调用 noPreloader() 隐藏,不影响搜索引擎对首页内容的抓取。
  • 性能优化建议:若项目已使用现代构建工具(Vite/Webpack),建议将 lottie-web 改为 ES 模块导入,并配合 dynamic import() 实现懒加载,进一步减小首屏 JS 体积。
  • 通过以上方案,你的 Lottie 预加载动画将严格遵循业务需求:仅在用户真正“新进入”首页时呈现,既提升体验,又避免干扰站内流畅导航。