簡體   English   中英

在加載所有圖像之前觸發圖像預加載器回調

[英]Image Preloader Callback firing before all images have loaded

問題:

我正在嘗試進行圖像預加載,並找到了我嘗試適應的出色解決方案 。我拿了代碼並將其包裝在一個返回諾言的函數中,但我注意到所有圖像之前都調用了done()處理函數被加載,我在做什么錯?

碼:

function preload(args) {

  var $defer = $.Deferred();
  var preload = args;
  var promises = [];
  for (var i = 0; i < preload.length; i++) {
    (function(url, promise) {
      var img = new Image();
      img.onload = function() {
        promise.resolve();
        console.log("loaded:" + url);
      };
      console.log("loading:" + url);
      img.src = url;
    })(preload[i], promises[i] = $.Deferred());
  }
  $.when.apply($, promises).done(function() {
    console.log("All images ready sir!");
    $defer.resolve();
  });

  return $defer;
}

var images = ['https://pbs.twimg.com/media/CbM1w65UcAAKfSJ.jpg', 'https://www.kenrockwell.com/nikon/d600/sample-images/600_0985.JPG', 'https://developer.nvidia.com/sites/default/files/akamai/gameworks/blog/GameWorks_Vulkan_and_OpenGL_Samples/vulkan2.png', 'https://encrypted-tbn1.gstatic.com/images?q=tbn:ANd9GcSKJ1fJHxLQ6unFkHZnHJoT-RfqrBvWMrzhmRFAPUt0VvdvZSDd', 'https://encrypted-tbn2.gstatic.com/images?q=tbn:ANd9GcTyvamruO8NCTeQJXtQaXM8xEQS5P9ANh_npfgZpv-7x8ISvzX5zg'];

preload(images).done(function() {
  console.log("OK, begin business process..");

});

控制台輸出:

在此處輸入圖片說明

的jsfiddle:

https://jsfiddle.net/sajjansarkar/f5k94n2r/

交換這兩行

    promise.resolve();
    console.log("loaded:" + url);

承諾正在解決,這將觸發其余的解決鏈。 然后添加日志消息。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM