Saber 酱的抱枕

Fly me to the moon

08/30
2015
学习

使用js的new Image()来预加载图片

当我第一次看到new Image()的时候,我很好骑。查了查资料,发现可以用new Image()来做图片的预加载。简单的示例:

1
2
3
4
5
var img1=new Image();
img1.src="/f/%E7%A9%B9%E5%A6%B9%E7%BE%8E%E5%9B%BE.jpg";
img1.onload=function  () {
    document.body.appendChild(img1);
}

这个图片加载完毕之后,追加到body里,就不会再有加载过程了(废话

再来看一个定时改变背景图片的情况:

1
2
3
4
5
6
7
8
9
var bgarr = ["/f/c9%E5%A4%B4%E9%A5%B0_01.jpg","/f/c9%E5%A4%B4%E9%A5%B0_02.jpg","/f/c9%E5%A4%B4%E9%A5%B0_03.jpg","/f/c9%E5%A4%B4%E9%A5%B0_04.jpg","/f/c9%E5%A4%B4%E9%A5%B0_05.jpg","/f/c9%E5%A4%B4%E9%A5%B0_06.jpg","/f/c9%E5%A4%B4%E9%A5%B0_07.jpg","/f/c9%E5%A4%B4%E9%A5%B0_08.jpg","/f/c9%E5%A4%B4%E9%A5%B0_09.jpg","/f/c9%E5%A4%B4%E9%A5%B0_10.jpg"];
var bgindex=0;
var t=setInterval(function () {
    document.body.style.backgroundImage="url("+bgarr[bgindex]+")";
    bgindex++;
    if (bgindex>=bgarr.length) {
        clearInterval(t)
    };
}, 1000);

每隔1秒改变背景图片,像这样的话,背景图会有一个加载过程,如果图片较大,可能会造成用户体验变差。

如果把全部图片都预加载之后再切换背景,就不会有这个问题了。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
var bgarr = ["/f/c9%E5%A4%B4%E9%A5%B0_01.jpg","/f/c9%E5%A4%B4%E9%A5%B0_02.jpg","/f/c9%E5%A4%B4%E9%A5%B0_03.jpg","/f/c9%E5%A4%B4%E9%A5%B0_04.jpg","/f/c9%E5%A4%B4%E9%A5%B0_05.jpg","/f/c9%E5%A4%B4%E9%A5%B0_06.jpg","/f/c9%E5%A4%B4%E9%A5%B0_07.jpg","/f/c9%E5%A4%B4%E9%A5%B0_08.jpg","/f/c9%E5%A4%B4%E9%A5%B0_09.jpg","/f/c9%E5%A4%B4%E9%A5%B0_10.jpg"];
var loadindex=0;
var bgindex=0;
var allimg=new Array();
for (var i = 0; i < bgarr.length; i++) {
    allimg&#91;loadindex&#93;=new Image();
    allimg&#91;loadindex&#93;.src=bgarr&#91;loadindex&#93;;
    loadindex++;
    if(loadindex>=bgarr.length){
        allimg[loadindex-1].onload=function  () {
            var t=setInterval(function () {
                document.body.style.backgroundImage="url("+bgarr[bgindex]+")";
                bgindex++;
                if (bgindex>=bgarr.length) {
                    clearInterval(t)
                };
            }, 1000);
        }
        break;
    };
};

当然,一般来说应该先给body设置一个背景图;然后这个例子缺少验证(最后一张图片加载完成之后开始切换背景,此时之前的图片都加载完了吗?)。可以参考《JS缓存图片实例》

注意,如果想要重复测试的话,可能需要清除缓存。我发现有时候强制刷新也还是会从缓存中读取。

使用js的new Image()来预加载图片

TOP
    显示公告
    聊      天
    吃 零 食
    博客后台
    生存时间
    关闭春菜
    X
    召唤春菜