var l = false;
var l2 = false;
var imm = new Image();
imm.src = "b.png";
imm.onload = function(){
l = true;
}
var imm2 = new Image();
imm2.src = "c.png";
imm2.onload = function(){
l2 = true;
}
如果l
和l2
为真,我怎么能告诉这个javascript启动一个函数?我应该设置一个循环来不断检查这两个变量吗?有没有更有效的方法?我不希望我的脚本在没有图像的情况下启动,但使用.onload
我可以等待只加载一个图像而不是所有图像。谢谢你的帮助!
答案 0 :(得分:11)
我认为更优雅的方式:
var loadedImagesCount = 0;
var imageNames = ["b.png", "c.png"];
var imagesArray = [];
for (var i = 0; i < imageNames.length; i++) {
var image = new Image();
image.src = imageNames[i];
image.onload = function(){
loadedImagesCount++;
if (loadedImagesCount >= imageNames.length) {
//loaded all pictures
}
}
imagesArray.push(image);
}
不要乱搞大量不同的图像变量,只需将图像名称存储在普通数组中,然后循环显示,并计算加载的图片数量。
答案 1 :(得分:5)
无需循环。你可以让他们调用一个函数来检查l和l2是否为真并执行你想要做的事情:
var onLoaded = function() {
if (l && l2) {
// do your stuff
}
}
imm.onload = function(){
l = true;
onLoaded(); // call to onLoaded
}
imm2.onload = function(){
l2 = true;
onLoaded(); // call to onLoaded
}
它基本上是Observer Pattern的一种简单形式。有一些jQuery插件,比如Radio.js,可以为你封装。
答案 2 :(得分:5)
这是一个通用的(适用于任何数量的图像)
function preload( images, callback){
var imageElements = [],
counter = images.length,
lfunc = function(){if (--counter === 0 && callback) callback(imageElements);};
// first create the images and apply the onload method
for (var i = 0, len = images.length; i < len; i++){
var img = new Image();
imageElements.push( img );
img.onload = lfunc;
img.src = images[i];
}
}
function codeOncePreloadCompletes(preloadedImages){
// Do whatever you want here
// images are preloaded
// you have access to the preloaded image if you need them
// with the preloadedImages argument
}
// USAGE
preload( ['b.png', 'c.png'], codeOncePreloadCompletes);
// OR
preload( ['b.png', 'c.png'], function(preloadImages){
// write directly here what to do after preload
});
答案 3 :(得分:1)
如果您想从给定的网址列表中按顺序加载图片,那么我觉得这很有用:
preloadImages_helper("firstURL", "secondURL");
function preloadImages_helper(){
var args = Array.prototype.slice.call(arguments);
if(!(args === undefined) && args.length > 0){
var img = new Image();
img.src = arguments[0];
img.onload = function(){
preloadedImages.push(img);
console.log("pushing image");
//Don't forget to call user code!
if(!(args === undefined) && args.length > 1){
args.shift();
preloadImages_helper.apply(this, args);
}
else{
console.log("finished loading images");
userCode();
}
};
}
}
答案 4 :(得分:0)
如果在整个脚本中只有2次设置了l
和l2
,那么您可以在设置值后进行检查。
var l = false;
var l2 = false;
var imm = new Image();
imm.src = "b.png";
imm.onload = function(){
l = true;
if (l && l2) {
myFunc();
}
}
var imm2 = new Image();
imm2.src = "c.png";
imm2.onload = function(){
l2 = true;
if (l && l2) {
myFunc();
}
}
function myFunc(){
//do stuff
}
答案 5 :(得分:0)
你不必经常检查,每次完成时都要检查另一个,这样,当第二个完成时你的功能会被激活,你只需要“检查”一次。 var l = false; var l2 = false;
var imm = new Image();
imm.src = "b.png";
imm.onload = function(){
l = true;
if (l2)
call yourFunction();
}
var imm2 = new Image();
imm2.src = "c.png";
imm2.onload = function(){
l2 = true;
if (l)
call yourFunction();
}