首先是document.load或window.load

时间:2017-11-21 04:52:46

标签: javascript

当我尝试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个事件。现在,我上面的代码可行。但是没有遵循记录的惯例,因此我寻求意见。

1 个答案:

答案 0 :(得分:0)

在加载文档并准备好DOM之前附加loadready事件时,应在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

jsfiddle demo

所以在我看来,如果在ready之后调用load,则是3.2.1的错误。