我下面有以下代码,当调用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');
}
答案 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