所以这里有一些背景。
我有一个移动网站,我在其中设置了一个覆盖整个页面内容的 iOS 微调器和白屏。在 document.ready 上,微调器和屏幕立即显示并显示,直到页面内容完全加载——此时屏幕和微调器消失,显示页面内容。
这一切都很好。但是,如果页面加载得足够快,我想稍微完善一下脚本并且不显示覆盖和微调器。其中许多页面将非常轻量级(如果用户之前访问过它们 - 之前已缓存)并且让微调器和叠加层在瞬间闪烁一秒钟或更短时间是无用的,并且可能会造成混乱。但是,当页面加载时间超过几秒钟时,拥有此功能非常有价值。
我试图找到一种仅在页面加载时间超过一秒时才执行脚本的方法。起初我以为我可以简单地告诉脚本等待一秒钟才能执行,但这样做时,当 DOM 构建页面的 html 结构时,用户会看到一闪而过的内容——如果所有资产都没有,那么它就会被隐藏t 在一秒钟内完成。
显然,这使用户感到困惑并且是不可接受的。
另一种看待这个问题的方法是,“如果页面被缓存/加载很快 - 不要显示微调器和覆盖。否则,继续显示它。”
有没有办法做到这一点?
这是我目前正在使用的代码(这是使用 jquery 和 spin.js):
// invoke spin.js
$(document).ready(function() {
var $overlayScreen = $('<div id="pageLoader" class="overlay pageLoad"></div>');
$('body').append($overlayScreen);
var opts = {
lines: 13, // The number of lines to draw
length: 7, // The length of each line
width: 4, // The line thickness
radius: 10, // The radius of the inner circle
rotate: 0, // The rotation offset
color: '#000', // #rgb or #rrggbb
speed: 1, // Rounds per second
trail: 60, // Afterglow percentage
shadow: false, // Whether to render a shadow
hwaccel: true, // Whether to use hardware acceleration
className: 'spinner', // The CSS class to assign to the spinner
zIndex: 2e9, // The z-index (defaults to 2000000000)
top: 'auto', // Top position relative to parent in px
left: 'auto' // Left position relative to parent in px
};
var target = document.getElementById('pageLoader');
var spinner = new Spinner(opts).spin(target);
});
// check to see if the page has loaded yet. If it has, hide the loader div
$(window).load(function() {
$('#pageLoader').addClass('loadComplete');
});