当我尝试NProgress.js时,正如文档所说,当文档加载启动它时,以及当窗口加载时停止它。但我发现情况正好相反;如果NProgress.done在开始之前,进度将永远不会结束。
if (typeof NProgress != 'undefined') {
$(document).ready(function () {
NProgress.done();
console.log( "document loaded" );
});
$(window).on("load", function() {
console.log( "window loaded" );
NProgress.start();
});
};
上面的控制台日志将在“加载文档”之前显示“已加载窗口”。 我已经交换了上面的代码使它工作。有什么想法吗?
我想我发布了一个误导性的问题。我确实理解.ready和.load事件。实际上我正在将NProgress.js应用到我的网页上,我注意到进度从未完成加载[由于.start()之前调用的.done()。所以我“试验”了那两个事件,发现那些因此不会发生2个事件。现在,我上面的代码可行。但是没有遵循记录的惯例,因此我寻求意见。
答案 0 :(得分:0)
在加载文档并准备好DOM之前附加load
和ready
事件时,应在ready
事件之前调用load
事件。
对于jQuery 3.2.1,可以创建一个设置,其中可以在jquery ready
事件之后调用load
事件,而本机事件按规范定义的顺序调用12.2.7 The end:
window.addEventListener('load', function(e) {
console.log('load');
}, true);
document.addEventListener('DOMContentLoaded', function(e) {
console.log('DOMContentLoaded');
}, true);
$(document).ready(function() {
console.log("jquery: ready");
});
$(window).on("load", function() {
console.log("jquery: loaded");
});
<强>输出强>
DOMContentLoaded
load
jquery: loaded
jquery: ready
所以在我看来,如果在ready
之后调用load
,则是3.2.1的错误。