如何在jQuery中完全执行函数后正确运行代码?

时间:2016-08-12 01:04:48

标签: javascript jquery internet-explorer jquery-3

我正在使用全屏CSS预加载器,一旦窗口完全加载,应该从网站上完全删除 AND 功能checkRetinaHeader()已完全执行。该站点在jQuery v3.1.0上运行。

该代码适用于所有主流浏览器,但在IE11上失败,在第一次加载时降低,当网站尚未缓存时(错误:脚本5007:无法获取未定义或空引用的属性'样式')。在这种情况下,.done(function() { ... }内的代码永远不会执行,CSS预加载器会继续加载。如果您重新加载页面,即该站点在缓存中,它可以工作。

$(window).on('load', function() {

  // wait until checkRetinaHeader() has been executed
  $.when( checkRetinaHeader() ).done(function() {

    var src = $('.header-section').css('background-image');

    var url = src.match(/\((.*?)\)/)[1].replace(/('|")/g,'');

    var img = new Image();

    img.onload = function() {
      removePreloader();
    };

    img.src = url;

    // removes function if background image has been completely loaded
    if (img.complete) img.onload();

  });

});


function checkRetinaHeader() {
   // checks window width and pixel density to load appropriate background image 
}

function removePreloader() {
   // hides fullscreen preloader overlay from document
}

非常感谢您的建议。

0 个答案:

没有答案