jQuery预加载器无法停止,无法跳转至主页面求助
预加载器一直卡在加载状态,无法进入站点的排查与解决思路
我太懂你折腾了好几个小时却毫无头绪的挫败感了,咱们一步步拆解这个问题,先从最容易排查的点开始:
1. 先删掉重复的初始化代码
你现在写了两次预加载器的初始化:
$('.js-preloader').preloadinator(); $('.js-preloader').preloadinator({ scroll:false, minTime: 2000, animation: 'fadeOut', animationDuration: 400, afterEnableScroll: function() {}, afterRemovePreloader: function() {}, });
第一次无配置的初始化会先执行,第二次带配置的初始化会覆盖或者干扰插件内部的状态(比如重新设置了计时的起始时间,或者重复绑定了window.load事件),这很可能导致预加载器的移除逻辑混乱。直接删掉第一行无参数的初始化,只保留带配置的那一段。
2. 验证window.load事件是否正常触发
这个预加载器插件的核心逻辑是等所有页面资源加载完成后(触发window.load事件),再检查最小显示时间是否满足,然后移除预加载器。如果window.load没触发,预加载器就会一直卡在那里。
你可以打开浏览器控制台,输入这段代码测试:
$(window).on('load', function() { console.log('页面所有资源加载完成啦!'); });
刷新页面后,如果控制台没打印这句话,说明页面里有资源没加载完成:
- 打开开发者工具的「Network」面板,查看所有资源的加载状态,找出发出请求后一直处于
pending或者返回404/500的资源(比如某个图片、字体、第三方脚本) - 修复这些资源的问题(比如替换404图片的地址,移除加载失败的第三方脚本),
window.load事件就能正常触发了。
3. 手动测试插件的移除功能是否正常
如果不确定插件本身有没有问题,你可以在控制台手动触发移除操作:
$.fn.preloadinator.removePreloader();
如果预加载器能正常消失,说明插件本身是好的,问题肯定出在window.load事件没触发或者初始化的问题上。
4. 应急方案:改用DOMContentLoaded触发(可选)
如果页面某些资源确实无法快速修复,你可以修改插件的触发逻辑,把等待所有资源加载完成改成等待DOM加载完成就移除预加载器:
找到插件代码里的这段:
$(window).on('load', function() { if($.fn.preloadinator.minTimeElapsed()) { $.fn.preloadinator.removePreloader(); } else { var now = new Date().getTime(), elapsed = now - start; setTimeout($.fn.preloadinator.removePreloader, settings.minTime - elapsed); } });
替换成:
$(document).ready(function() { if($.fn.preloadinator.minTimeElapsed()) { $.fn.preloadinator.removePreloader(); } else { var now = new Date().getTime(), elapsed = now - start; setTimeout($.fn.preloadinator.removePreloader, settings.minTime - elapsed); } });
这样只要页面DOM结构加载完成,预加载器就会在满足最小显示时间后消失,不用等所有资源加载完。
5. 最后检查jQuery的引入顺序
确保你是先引入jQuery,再引入预加载器插件,最后写初始化代码,比如:
<script src="jquery.min.js"></script> <script src="你的预加载器插件.js"></script> <script> // 初始化代码 $('.js-preloader').preloadinator({ scroll:false, minTime: 2000, animation: 'fadeOut', animationDuration: 400, afterEnableScroll: function() {}, afterRemovePreloader: function() {}, }); </script>
如果jQuery在插件之后引入,插件无法正常初始化,也会导致预加载器一直卡住。
先从这几个点排查,应该能解决你的问题!
内容的提问来源于stack exchange,提问作者sleepydev
相关产品推荐
相关产品推荐

