我很难理解图像预加载器如何 在Java脚本中工作。因此,如果有人可以用一个很有帮助的例子来说明他们的工作方式。 没有jQuery
加载单个图像
浏览器将异步加载图像…意味着向浏览器提供.src
图像的时,它将开始在后台加载该图像,但也会在之后直接继续处理javascript代码.src
// create a new image object
var img=new Image();
// set the image object's image source
img.src='myImage.png';
// do some stuff while the image is loading in the background
alert('Your image has started loading, but is not yet complete');
该警报甚至会在图像完全加载并可以使用之前显示。
那么您如何知道映像何时完全加载并可以使用呢?
答:您可以告诉浏览器在完成图像加载后“给您回电”。通过在图像对象上添加“
img.onload”函数,您会得到“回调”。每当浏览器完成图像加载时,浏览器都会触发“ img.onload”功能中的代码。
img.onload = theImageHasFinishedLoading;
function theImageHasFinishedLoad(){
alert('Your image has finished loading...you can use it now');
}
完整的图像加载过程将按以下顺序进行:
// happens 1st
var img=new Image();
// happens 2nd: this callback is ASSIGNED, but NOT TRIGGERED yet
// until the image has fully loaded
img.onload = theImageHasFinishedLoading;
// happens 3rd
img.src='myImage.png';
// happens 4th
alert('Your image has started loading, but is not yet complete');
// happens 5th after the browser has fully loaded the image
// (The browser will call this function automatically because .onload was set)
function theImageHasFinishedLoad(){
alert('Your image has finished loading...you can use it now');
}
预加载多张图片
要预加载多个图像:
创建一个包含所有图像URL的数组,然后将图像URL添加到该数组。
// For example
var imageURLs=[];
imageURLs[0]=’myImage.png’;
创建一个数组来保存所有图像对象(==您的实际图像)。
// For example
var imgs=[];
将new Image
元素添加到图像对象数组(new Image
为URL数组中的每个URL 添加一个)。
//For example
imgs[0] = new Image();
将每个图像对象的.onload
回调设置为相同的函数。
// For example
imgs[0].onload = theImageHasFinishedLoading;
使用图片网址数组将.src
每个图片的设置为单独的网址。
// For example
imgs[0].src = imageURLs[0];
在theImageHasFinishedLoading
回调中,每次成功加载新图像时都增加一个计数器。
// For example
var counter=0;
function theImageHasFinishedLoading(){
counter++;
}
当计数器达到与图像URL数组相同的长度时,您将知道所有图像都已完全加载。
function theImageHasFinishedLoading(){
counter++;
if(counter>=imageURLs.length){
alert('All the images have successfully preloaded. Go use them now!');
}
}
这是完整的示例代码和演示:
window.onload=(function(){
// canvas related variables
var canvas=document.getElementById("canvas");
var ctx=canvas.getContext("2d");
var cw=canvas.width;
var ch=canvas.height;
// put the paths to your images in imageURLs[]
var imageURLs=[];
imageURLs.push("https://dl.dropboxusercontent.com/u/139992952/multple/face1.png");
imageURLs.push("https://dl.dropboxusercontent.com/u/139992952/multple/face2.png");
// the loaded images will be placed in imgs[]
var imgs=[];
var imagesOK=0;
startLoadingAllImages(imagesAreNowLoaded);
// Create a new Image() for each item in imageURLs[]
// When all images are loaded, run the callback (==imagesAreNowLoaded)
function startLoadingAllImages(callback){
// iterate through the imageURLs array and create new images for each
for (var i=0; i<imageURLs.length; i++) {
// create a new image an push it into the imgs[] array
var img = new Image();
// Important! By pushing (saving) this img into imgs[],
// we make sure the img variable is free to
// take on the next value in the loop.
imgs.push(img);
// when this image loads, call this img.onload
img.onload = function(){
// this img loaded, increment the image counter
imagesOK++;
// if we've loaded all images, call the callback
if (imagesOK>=imageURLs.length ) {
callback();
}
};
// notify if there's an error
img.onerror=function(){alert("image load failed");}
// set img properties
img.src = imageURLs[i];
}
}
// All the images are now loaded
// Do drawImage & fillText
function imagesAreNowLoaded(){
// the imgs[] array now holds fully loaded images
// the imgs[] are in the same order as imageURLs[]
ctx.font="30px sans-serif";
ctx.fillStyle="#333333";
// drawImage the first image (face1.png) from imgs[0]
// and fillText its label below the image
ctx.drawImage(imgs[0],0,10);
ctx.fillText("face1.png", 0, 135);
// drawImage the first image (face2.png) from imgs[1]
// and fillText its label below the image
ctx.drawImage(imgs[1],200,10);
ctx.fillText("face2.png", 210, 135);
}
}); // end window.onload
body{ background-color: ivory; }
#canvas{border:1px solid red;}
<canvas id="canvas" width=400 height=200></canvas>
我正在尝试将容器的背景图像设置为来自资产的图像,如下所示: 但这将需要一些时间来加载和返回空白,同时屏幕直到图像加载。. 因此,我尝试在构建之前预加载图像,如下所示: 这返回了这个错误:
问题内容: 我有一个隐藏的联系表单,单击该按钮即可进行部署。它的字段设置为CSS背景图像,它们的出现时间总是比已切换的div晚一点。 我在本节中使用了此代码段,但运气不好(清除缓存后): 我正在使用jQuery作为我的库,如果我也可以使用它来解决此问题,那将很酷。 多谢您的光临。 问题答案: 我可以确认我的原始代码似乎有效。我随便坚持使用错误路径的图像。
问题 我试图把一个python文件变成一个EXE文件,但是我似乎每次都遇到同样的问题,无论是CX_Freeze还是PyInster。我只是尝试使用pyInster和我做了一个EXE文件使用命令 一切正常。它在dist文件中创建exe。但是,当我打开exe时,它会显示一个命令窗口,然后很快关闭。我设法捕获了我在使用打印屏幕时遇到的错误,它显示pygame错误:无法打开image family。jpg
描述 (Description) Framework7中的预加载器由可缩放矢量图形(SVG)制成,并使用CSS动画,这使其易于调整大小。 预加载器有两种颜色 - 默认为浅色背景 另一个是黑暗的背景 您可以在HTML中使用preloader类,如下所示 - 例子 (Example) 以下示例演示了Framework7中预加载器的使用 - <!DOCTYPE html> <html> <head
问题内容: 我正在寻找一种快速简单的方法来用JavaScript预加载图像。如果重要的话,我正在使用jQuery。 但是,对于我想要的东西来说似乎有点过高了! 我知道那里有执行此操作的jQuery插件,但它们看上去都很大(大小);我只需要一种快速,轻松和简短的方式来预加载图像! 问题答案: 快速和简单的: 或者,如果您想要一个jQuery插件: