前端共享Web前端之路让前端飞

js图片预加载

2017-09-04  本文已影响66人  aermin

tips:接下去会在github写博客,简书不再更新和修改文章,欢迎大家逛逛我的新博客点击查看 ,我会尽量用更容易理解的方式写好每一篇博客,大家一起学习交流😄。

继上一次的图片懒加载,这次讲下js实现图片预加载。

先上demo

demo:图片预加载

再上代码

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
    <script>
        (function () {
            function loadImages(sources, callback) {
                var count = 0,
                    images = {},
                    imgNum = 0;
                for (src in sources) {
                    imgNum++;   //imgNum =2
                }
                for (src in sources) { //src 为 img1和img2
                    images[src] = new Image();  //images = {img1:img,img2:img}
                    images[src].onload = function () { //onload 事件会在页面或图像加载完成后立即发生
                        if (++count >= imgNum) { //当次数大于等于2次时
                            callback(images);  //调用loadImages的回调函数
                        }
                    }
                    images[src].src = sources[src]; //img1-> img.src = "http://pic.58pic.com/58pic/17/18/97/01U58PIC4Xr_1024.jpg";img2同理
                }
            }
            //存储图片链接信息的关联数组  
            var sources = { //想要多少张就放多少张
                img1: "http://pic.58pic.com/58pic/17/18/97/01U58PIC4Xr_1024.jpg",
                img2: "http://ww4.sinaimg.cn/large/006y8mN6gw1fa5obmqrmvj305k05k3yh.jpg",
                img3:"http://ww1.sinaimg.cn/large/006y8mN6gw1fa7kaed2hpj30sg0l9q54.jpg"
            };
            //调用图片预加载函数,实现回调函数  
            loadImages(sources, function (images) {
                //TO-DO something  (如下面用canvas把图画出来)
                //var images = new Image();   创建一个<img>元素
                // images.src = 'myImage.png';  设置图片源地址
                var canvas = document.getElementById('canvas');
                var ctx = canvas.getContext('2d');
                //ctx.drawImage(image, dx, dy, dWidth, dHeight);
                ctx.drawImage(images.img1, 20, 20, 100, 100);
                ctx.drawImage(images.img2, 140, 20, 100, 100); 
                ctx.drawImage(images.img3, 260, 20, 100, 100); 
            });
        }());
    </script>
</head>
<body>
    <canvas id="canvas" width="1000px" height="1000px"></canvas>
</body>
</html>

可以看出代码注释很详细,
如果有些知识点还不是很清楚,请看我找的一些好的知识讲解文章,省得像我一样到处找啦;

同时,如果您觉得有点帮助,可以关注给我的github项目给个start,watch哦,我会不定期更新js的一些开发常用的知识点技能。
js开发常见技能收集->github

onload
for in 遍历
Image 元素构造器
为何使用++count
如何使用canvas创建图片
canvas的drawImage()

如有错误,恳请指出指导^ ^

上一篇下一篇

猜你喜欢

热点阅读