• 发布我的图片预加载控件YPreLoadImg v1.0


    介绍

    大家好!很高兴向大家介绍我的图片预加载控件YPreLoadImg。它可以帮助您预加载图片,并且能显示加载的进度,在预加载完成后调用指定的方法。

    YPreLoadImg控件由一个名为PreLoadImg的类组成。该类的构造函数为:PreLoadImg(images, onstep, onload)

    依赖库

    YOOP

    用法

    new PreLoadImg(
        /**
         * 图片数据
         * id为图片id号,url为图片地址
         */
        [
            { id: "a1", url: "a1.png" },
            { id: "a2", url: "a2.png" }
        ],
        /**
         * 获得加载进度
         * @param currentLoad 已加载的图片数量
         * @param imgCount 图片总数
         */
        function (currentLoad, imgCount) {
        },
        /**
         * 加载完成后调用
         */
        function () {
        }
    );

    代码

    var PreLoadImg = YYC.Class({
        Init: function (images, onstep, onload) {
            this._checkImages(images);
    
            this.config = {
                images: images || [],
                onstep: onstep || function () {},
                onload: onload || function () {}
            };
            this._imgs = {};
            this.imgCount = this.config.images.length;
            this.currentLoad = 0;
            this.timerID = 0;
    
            this.loadImg();
        },
        Private: {
            _imgs: {},
    
            _checkImages: function (images) {
                var i = null;
    
                for (var i in images) {
                    if (images.hasOwnProperty(i)) {
                        if (images[i].id === undefined || images[i].url === undefined) {
                            throw new Error("应该包含id和url属性");
                        }
                    }
                }
            },
            _bind: function (object, fun) {
                return function () {
                    return fun.apply(object, arguments);
                };
            }
        },
        Public: {
            imgCount: 0,
            currentLoad: 0,
            timerID: 0,
    
            /**
             * 通过图片id号来获得图片对象
             * @param id 图片id号
             * @returns {*} 图片对象
             */
            get: function (id) {
                return this._imgs[id];
            },
            loadImg: function () {
                var c = this.config,
                    img = null,
                    i,
                    self = this,
                    image = null;
    
                for (i = 0; i < c.images.length; i++) {
                    img = c.images[i];
                    image = this._imgs[img.id] = new Image();
                    image.onload = function () {
                        this.onload = null;
                        self._bind(self, self.onload)();
                    };
                    image.src = img.url;
    
                    this.timerID = (function (i) {
                        return setTimeout(function () {
                            if (i == self.currentLoad) {
                                image.src = img.url;
                            }
                        }, 500);
                    })(i);
                }
            },
            onload: function (i) {
                clearTimeout(this.timerID);
                this.currentLoad++;
                this.config.onstep(this.currentLoad, this.imgCount);
                if (this.currentLoad === this.imgCount) {
                    this.config.onload(this.currentLoad);
                }
            },
            dispose: function () {
                var i,
                    _imgs = this._imgs;
    
                for (i in _imgs) {
                    _imgs[i].onload = null;
                    _imgs[i] = null;
                }
                this.config = null;
            }
        }
    });

    效果演示

    下载

    Demo下载

  • 相关阅读:
    hanoi(老汉诺塔问题新思维)
    ABP文档
    ABP文档
    ABP文档
    ABP文档
    ABP文档
    ABP文档
    ABP文档
    ABP文档
    ABP框架
  • 原文地址:https://www.cnblogs.com/chaogex/p/3203061.html
Copyright © 2020-2023  润新知