图片的预加载, 图片替换等操作

本文探讨了图片预加载的重要性,旨在提高页面流畅性。通过JavaScript的Image对象,可以预先下载并缓存图片,避免HTTP请求延迟。文章介绍了批量缓存图片的实现方法,并讨论了如何利用onload和onerror事件监听图片加载状态,确保后续处理的准确性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目的

如果一个img的src需要从一个url转换到另一个url的话,它会再发出一个http请求去下载图片. 但是如果我们提前在js中下载缓存好这个图片的话,他会直接从缓存中获取,并不需要等待请求回返的过程,这样就提高了流畅性.
一个图片转换到另一个图片的话

源码

网上说有三种方式实现预加载.
我们只需要研究明白一个即可, 即可以采用js的image对象, 对它提前进行缓存

批量缓存图片

我们提前定义函数

<script>
    function preloadImage(urlArray)
    {
        if (urlArray && urlArray instanceof Array)
        {
            for (var index=0; index<urlArray.length; index++)
            {
                var image = new Image();
                image.src = urlArray[index];
            }
        }
    }

    var urlArray = [];
    urlArray.push('http://img0.bdstatic.com/img/image/shouye/xinshouye/weimeisy1.jpg');
    urlArray.push('http://img0.bdstatic.com/img/image/chongwu01.jpg');
    urlArray.push('http://img0.bdstatic.com/img/image/zhaoliying01-1.jpg');
    preloadImage(urlArray);
</script>

<a href="#" onmouseover="document.getElementById('image').setAttribute('src', 'http://img0.bdstatic.com/img/image/shouye/xinshouye/weimeisy1.jpg')">鼠标放上去,图片会改变,并不会请求图片</a>
<image src="http://img0.bdstatic.com/img/image/chongwu01.jpg" id="image"></image>

更高级

上面的方法实现了最基本的预加载图片,
但实际情况下,我们往往需要确切的知道图像是否被真正加载完成,并可能在后续执行一系列对图片的操作功能。
我们可以使用onload和onerror事件去处理决定图片是否加载完成(或者失败)

    <script>
    function preloadImage(urlArray, callback)
    {
        if (urlArray && urlArray instanceof Array)
        {
            for (var index=0; index<urlArray.length; index++)
            {
                var image = new Image();
                image.src = urlArray[index];

                if (callback && typeof callback === 'function')
                {
                    callback.call(image);
                }
            }
        }
    }

    //定义callback,对图片进行操作
    function imageOperation()
    {
        // Image对象的complete 属性可以用来检测图像是否加载完成(可以进行默认图片显示);
        // 当图像处于装载过程中时,该属性值false,
        // 当发生了onload、onerror、onabort中任何一个事件后,该属性变为true, 表示图像装载过程结束(不管成没成功),
        if (!this.complete)
        {
            console.dir('图片正在加载');
        }

        //图片已加载的事件
        this.onload = function()
        {
            alert('图片已加载');
            //然后可以设置图片的高度等属性
        }
        //图片加载失败的事件, 然后替换图片
        this.onerror = function()
        {
            alert(this.src + '图片加载失败');
            this.src = 'http://img0.bdstatic.com/img/image/zhaoliying01-1.jpg';
        }
        //图片加载停止的事件, 然后替换图片
        this.onabort = function()
        {
            alert(this.src + '图片停止加载');
            this.src = 'http://img0.bdstatic.com/img/image/zhaoliying01-1.jpg';
        }

    }


    var urlArray = [];
    urlArray.push('http://img0.bdstatic.com/img/image/shouye/xinshouye/weimeisy1.jpg');
    urlArray.push('http://img0.bdstatic.com/img/image/chongwu01.jpg');
    urlArray.push('http://img0.bdstatic.com/img/image/zhaoliying01-1.jpg');
    preloadImage(urlArray, imageOperation);

    //上面的方法实现了最基本的预加载图片,
    //但实际情况下,我们往往需要确切的知道图像是否被真正加载完成,并可能在后续执行一系列对图片的操作功能。
    // 我们可以使用onload和onerror事件去处理决定图片是否加载完成(或者失败)
</script>

<a href="#" onmouseover="document.getElementById('image').setAttribute('src', 'http://img0.bdstatic.com/img/image/shouye/xinshouye/weimeisy1.jpg')">鼠标放上去,图片会改变,并不会请求图片</a>
<image src="http://img0.bdstatic.com/img/image/chongwu01.jpg" id="image"></image>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值