Javascript-加载图像

Javascript-加载图像,javascript,html,image,Javascript,Html,Image,我有一个javascript,它使用许多图像,我想在用户开始点击之前加载它们。图像有点大,所以需要一些时间。这是我的密码: startTest(); function preloadImages() { console.log("preload images"); for(var i = 1; i <= 132; i++) { var img = new Image(); images[i-1] = "images/"+i+".png";

我有一个javascript,它使用许多图像,我想在用户开始点击之前加载它们。图像有点大,所以需要一些时间。这是我的密码:

startTest();

function preloadImages() {
    console.log("preload images");
    for(var i = 1; i <= 132; i++) {
        var img = new Image();
        images[i-1] = "images/"+i+".png";
        img.src = images[i-1];
        if(i == 132) {
            img.load = doneLoading();
        }
    }
}

function doneLoading() {
    console.log("done loading");
    document.getElementById("laading").style.display = "none";
    console.log("loading gone");
    showReady();
}

function startTest() {
    console.log("start test");
    trialCount = 0;
    document.getElementById("laading").style.display = "block";

    preloadImages();
    var hammertime = Hammer(document.body).on("touch", function(event) {
        registerTouch(event);
    });

    startTestTime = +new Date();
    console.log("end start test");
}
startTest();
函数preload images(){
日志(“预加载图像”);

对于(var i=1;i您需要在每次图像加载时检查该图像是最后一个加载的图像。请使用计数变量(
load
)进行检查

函数预加载图像(){
var=0;

对于(var i=0;i您需要在每次图像加载时检查该图像是最后一个加载的图像。请使用计数变量(
load
)进行检查

函数预加载图像(){
var=0;

对于(var i=0;i为了进行预加载,您必须不断检查正在下载的每个映像的
完成状态。因为,您无法事先知道下载每个映像需要多少时间(取决于延迟或大小),您必须实现一个计时器,该计时器将持续轮询每个图像上的
完成状态

以下是一种可能的算法:

var timer = null, 
    numImages = 132, 
    allImages = new Array; 

function preLoadImages() { 
    document.getElementById('loadcaption').innerHTML = 'Loading images... '; 
    for (var i = 0; i < numImages; i++) { 
        var tmp = "images/" + i + ".png";
        allImages[i] = new Image(); 
        allImages[i].onLoad = imgOnLoad(tmp); 
        allImages[i].src = tmp; 
    }  
    timer = window.setInterval('checkLoadComplete()', 250); 
}  

function imgOnLoad(imgName) { window.status = 'Loading image... ' + imgName; } 

function checkLoadComplete() { 
    for (var i = 0; i < allImages.length; i++) { 
        if (!allImages[i].complete) { 
            imgOnLoad(allImages[i].src); 
            document.getElementById('loadcaption').innerHTML = 'Loading images... ' + Math.round((i/allImages.length)*100,0) + ' %'; 
            return; 
        } 
    } 
    window.clearInterval(timer); 
    document.getElementById('loadcaption').innerHTML = 'Completed.'; 
    window.status = ''; 
} 
var timer=null,
数值图像=132,
allImages=新阵列;
函数preload images(){
document.getElementById('loadcaption')。innerHTML='LoadingImages…';
对于(var i=0;i
其中,
loadcaption
是一个简单的HTML元素,用于显示进度。(您也可以使用动画gif来加载动画)

其思想是通过计时器调用
checkLoadComplete
来持续检查每个图像上的
complete
状态。一旦所有图像(加载)
complete
,则
for
循环退出,计时器被清除


通过调用
preLoadImages();
函数开始预加载过程。

为了进行预加载,您必须不断检查正在下载的每个图像的
完成状态。因为,您无法事先知道下载每个图像需要多少时间(取决于延迟或大小),您必须实现一个计时器,该计时器将持续轮询每个图像上的
完成状态

以下是一种可能的算法:

var timer = null, 
    numImages = 132, 
    allImages = new Array; 

function preLoadImages() { 
    document.getElementById('loadcaption').innerHTML = 'Loading images... '; 
    for (var i = 0; i < numImages; i++) { 
        var tmp = "images/" + i + ".png";
        allImages[i] = new Image(); 
        allImages[i].onLoad = imgOnLoad(tmp); 
        allImages[i].src = tmp; 
    }  
    timer = window.setInterval('checkLoadComplete()', 250); 
}  

function imgOnLoad(imgName) { window.status = 'Loading image... ' + imgName; } 

function checkLoadComplete() { 
    for (var i = 0; i < allImages.length; i++) { 
        if (!allImages[i].complete) { 
            imgOnLoad(allImages[i].src); 
            document.getElementById('loadcaption').innerHTML = 'Loading images... ' + Math.round((i/allImages.length)*100,0) + ' %'; 
            return; 
        } 
    } 
    window.clearInterval(timer); 
    document.getElementById('loadcaption').innerHTML = 'Completed.'; 
    window.status = ''; 
} 
var timer=null,
数值图像=132,
allImages=新阵列;
函数preload images(){
document.getElementById('loadcaption')。innerHTML='LoadingImages…';
对于(var i=0;i
其中,
loadcaption
是一个简单的HTML元素,用于显示进度。(您也可以使用动画gif来加载动画)

其思想是通过计时器调用
checkLoadComplete
来持续检查每个图像上的
complete
状态。一旦所有图像(加载)
complete
,则
for
循环退出,计时器被清除


通过调用
preLoadImages();
函数开始预加载过程。

一件事的可能重复:您不应该假设您创建的最后一个图像是最后一个要完成的图像(
img.load=doneLoading();
可能应该对所有图像执行,然后检查它是否被调用132次)一件事的可能重复:您不应该假设您创建的最后一个映像是最后一个要完成的映像(
img.load=doneLoading();
可能应该对所有映像执行,然后检查它是否被调用132次)您是否尝试过此代码?我放置了一个console.log(已加载)在加载的++下,它永远不会被打印出来…嗯。有什么想法吗?推送之间有什么区别吗我做了什么?不,这更多的是个人偏好。当我处理数组时,我喜欢使用该语言提供的固有方法,因为它确保索引是正确的。因为JavaScript中的所有内容都是一个对象,这意味着你可以像索引对象一样索引数组。我可以使用负索引
images[-100]=“foo.jpg”
甚至字符串
images['bar']=“bar”
。但是,固有的数组方法利用了这种灵活性,使您能够更轻松地确定数组的使用方式:使用整数作为索引。它对调试友好。您尝试过这段代码吗?我放了一个console.log(已加载)在加载的++下,它永远不会被打印…嗯。有什么想法吗?推和我做的有什么区别吗?不,这更多的是个人偏好。当我处理