用JavaScript预加载图像(完成后需要发出警报)

时间:2019-01-10 15:42:05

标签: javascript

我下面有以下代码,当调用PreloadAllImages函数时,该代码成功地将图像预加载到浏览器缓存中。有谁知道如何发送简单的警报,例如“所有图像均已预加载到浏览器缓存中。”加载最后一张图像(或所有图像)时。我有300张图片,因此setTimeOut由于延迟/下载延迟原因而无法使用。我尝试过回调,将警报命令放在其他位置,等等...但是没有成功。

此代码基于此处找到的JavaScript Only Method#1。 https://perishablepress.com/3-ways-preload-images-css-javascript-ajax/

function PreLoadAllImages() {
  var images = new Array();
  function preload() {
    for (i = 0; i < preload.arguments.length; i++) {
      images[i] = new Image();
      images[i].src = preload.arguments[i];
    }
  }

  preload('Images/Image1.jpg', 'Images/Image2.jpg', ... , 'Images/Image300.jpg');
}

4 个答案:

答案 0 :(得分:1)

在一些帮助下,这是在其他人需要的情况下解决问题的方法。将图像加载到html页面上的不可见div中,然后运行脚本以确保所有内容均已加载。一个按钮调用PreLoadAllImages(),然后调用CheckImages()。

var imagefiles = [
"Images/Image1.jpg",
"Images/Image2.jpg",
.....
"Images/Image300.jpg"];

function PreLoadAllImages () {
    imagefiles.forEach(function(image){
        var img = document.createElement('img');
        img.src = image;
        document.body.appendChild(img);});
    $('img').hide();
} 

var all_loaded;

function CheckImages() {
    $('img').each(function(){ // selecting all image element on the page
    var img = new Image($(this)); // creating image element
    img.src = $(this).attr('src'); // pass src to image object
    if(img.complete==false) {
        all_loaded=false;
        return false;
    }
    all_loaded=true;
    return true;});
}

function CheckLoadingImages() {
    var result;
    var Checking=setInterval(function(){
         result=CheckImages();
         if(all_loaded==true) {
             clearInterval(Checking);
             MsgAfterLoading();
            }
         }, 2000);
}

function MsgAfterLoading() {
    alert('All Images Loaded');
}

答案 1 :(得分:0)

您可以检查i是否等于数组的长度,因此它看起来像:

for (i = 0; i < preload.arguments.length; i++) {
        images[i] = new Image()
        images[i].src = preload.arguments[i]
        //the code
        if (i == preload.arguments.length){
            alert("Last image loaded");
        }
        //the code
    }

如果您有任何疑问,请告诉我。

您能否尝试遍历所有图像元素并检查naturalWidth属性(如果它们均大于0,并且最后一个图像发出警报)。

此链接:Preloading Images in JavaScript (Need an Alert When Completed)应该有帮助

答案 2 :(得分:0)

诺言可以解决您的问题。

https://developer.mozilla.org/fr/docs/Web/JavaScript/Reference/Objets_globaux/Promise

var myPromise = new Promise( function(resolve, reject) {
    // preload code
    resolve(true);
};

myPromise.then(function() {
    // your alert
};

答案 3 :(得分:0)

您可以使用onload事件。

cpuManagerPolicy