美文网首页
把img onload封成promise规范

把img onload封成promise规范

作者: day_day_up | 来源:发表于2017-10-12 11:56 被阅读0次

    ES5

    利用ES5实现多图预加载,可以通过计数器判断有多少图片加载完成。

    var count = 0,    // 计数器
        imgs = [];
    
    /*
     * (Array)source 图片url
     * (Fun)cb 回调
     */
    function preLoadImg(source, cb) {
        source.forEach(function(url, i) {
            imgs[i] = new Image();
            imgs[i].onload = function() {
                if(++count === source.length) {
                    cb && cb();
                }
            }
            imgs.src = url;
        })      
    }
    

    ES6

    ES6原生提供了Promise对象,接下来用Promise改写上面的代码。

    由于es6 promise原声兼容性问题可以 引入如下cdn库
    http://cdn.bootcss.com/es6-promise/4.1.0/es6-promise.auto.min.js

    // 预处理图片
        function preLoadImg(source){
            let pr = [];
            source.forEach(url => {// 预加载图片
                let p = loadImage(url)
                        .then(img => this.images.push(img))
                        .catch(err => console.log(err))
                pr.push(p);
            })
    
            // 图片全部加载完
            Promise.all(pr)
                    .then(() => {
                        // do sth
                    });
    
        }
        // 预加载图片
        function loadImage(url) {
            return new Promise((resolve, reject) => {
                let img = new Image();
                img.onload = () => resolve(img);
                img.onerror = reject;
                img.src = url;
            })
        }
    

    相关文章

      网友评论

          本文标题:把img onload封成promise规范

          本文链接:https://www.haomeiwen.com/subject/zovnyxtx.html