图片预加载

1.说明及原理

  • 预加载的作用:图片预加载就是在使用图片之前,事先将图片缓存下来,等到页面需要的时候直接从缓存中读取,无需再次发送网络请求,从而加快网页加载速度
  • 预加载的原理::创建Image()元素或者img标签,当为其设置src属性时,会自动发送网络请求,浏览器会将此图片资源缓存起来。之后页面解析到此图片资源时,会直接从缓存中读取,而无需再次发送网络请求。

2.代码实现

<body style="padding:20px;">
    <button onclick="preLoadImg()" class="btn btn-default">预加载图片</button>
    <button onclick="preLoadImgByTag()" class="btn btn-default">使用img标签预加载图片</button>
    <button onclick="preLoadScript()" class="btn btn-default">使用script标签预加载js文件(script标签无法预加载)</button>
    <button onclick="showImg()" class="btn btn-default">显示预加载的图片timg2.jpg</button>
</body>
<script>
function preLoadImg(){
    //创建图片对象
    var image = new Image()
    //为图片设置src
    image.src="timg.jpg"
}
function preLoadImgByTag(){
    //创建图片对象
    var img = document.createElement('img')
    //为图片设置src
    img.src="timg2.jpg"
}
// script标签无法预加载
function preLoadScript(){
    //创建图片对象
    var script = document.createElement('script')
    //为图片设置src
    script.src="index.js"
}
function showImg(){
    var img = document.createElement('img')
    //为图片设置src
    img.src="timg.jpg"
    //设置宽度
    img.width=300
    //插入到文档中
    document.body.appendChild(img)
}

运行结果:

3.封装一个预加载图片的函数

  • (1)将图片的url放入到数组中
  • (2)函数接收2个参数,分别是urlArr和index,index为当前预加载的下标
  • (3)监听图片预加载的情况,无论成功还是失败都继续加载下一张,除非已经到了最后一张
<script>
    //预加载图片的函数
    function preLoadImg(urlArr,index){
        //创建图片对象
        var image = new Image()
        //设置src属性
        image.src = urlArr[index]

        //监听图片的加载情况
        image.onload = function(){
            console.log('图片加载成功',index)
            //如果不是最后一张图片,则递归调用预加载下一张
            if(index < urlArr.length-1){
                index++
                preLoadImg(urlArr,index)
            }
        }
        image.onerror = function(){
            console.log('图片加载失败',index)
            //如果不是最后一张图片,则递归调用预加载下一张
            if(index < urlArr.length-1){
                index++
                preLoadImg(urlArr,index)
            }
        }
        
    }
    window.onload = function(){
        var urlArr = ['timg.jpg','no.jpg','timg2.jpg','timg3.jpg']
        preLoadImg(urlArr,0)
    }
</script>

运行结果;

posted @ 2019-11-21 22:50  ---空白---  阅读(583)  评论(0编辑  收藏  举报