在javascript中更改src后,我的图像没有立即更新

时间:2011-11-19 17:48:13

标签: javascript image src

我正在使用下面的函数来更改img src。这是十个图像的阵列。在使用断点进行循环时,图像不会立即在页面上全部更新。他们中的一些人。如果我检查页面上未更改的图像(在断点处暂停),则src已更改,但图像尚未更改。当函数结束时,所有未更改的图像都会正确更新。 任何人都知道他们为什么不立即更新,以及我如何强制他们更新? 此外,有没有一种方法可以阻止所有这些更新,直到它们全部重新分配,从而让它们全部更新“同时”?这是我的功能。

function mainFunction(){
    finalSet = calculateSet();
    for ( var int = 0; int < finalSet.length; int++) {
        var fileName = "cardImg" + (int);
        document.getElementById(fileName).src = "images/cards/" + finalSet[int].name + ".jpg";
    }
}

感谢您的帮助。 戴尔

4 个答案:

答案 0 :(得分:1)

图像仅在加载后才会显示 您可能希望预先加载图像以获得即时结果 应该做的事情应该做的事情:

function preloadImg(src,callback){
    var img = new Image();
    img.onload = callback;
    img.src = src;
}
function preloadImages(imgs,callback){
    var imagesToLoad = imgs.length;
    var _f = function(){
        if(imagesToLoad > 0) 
            return;
        callback();
    } 
    for(var i=0,l=imgs.length;i<l;i++)
        preloadImg(imgs[0],function(){
            imagesToLoad--;
            _f();
        });
}

preloadImages(yourImages,mainFunction);

答案 1 :(得分:1)

我也有这个问题。我发现它需要一段时间来缓存图像,然后在所有图像缓存后第二次正常工作

希望这能解决你的问题。

答案 2 :(得分:1)

在调用更改事件之前,您需要预先加载图像。

你可以这样做,比如加载页面时。假装你把它们放在一个数组中。

var images = ["img1.jpg", "img2.jpg"]
var loadedImages = []
var img
for (var i = 0; i < images.length; i++) {
   img = new Image().src = images[i]
   loadedImages[i] = img // not sure if this is needed
}

您还可以使用加载事件来检查是否加载了图像。关于这方面的一些讨论可以在这里找到:http://api.jquery.com/load-event/

最后,您可以使用图像预加载器脚本: Preloading images with jQuery

答案 3 :(得分:-2)

没有javascript你可以预加载它们将它们全部放在一个隐藏的div(display:none)中,你放在缩略图之后的位置(所以浏览器会首先加载缩略图)