监听自定义事件

window.CusEventTarget = function () {
    this._listener = {};
};

CusEventTarget.prototype = {
    constructor: this,
    addEvent: function (type, fn) {
        if (typeof type === "string" && typeof fn === "function") {
            if (typeof this._listener[type] === "undefined") {
                this._listener[type] = [fn];
            } else {
                this._listener[type].push(fn);
            }
        }
        return this;
    },
    addEvents: function (obj) {
        obj = typeof obj === "object" ? obj : {};
        var type;
        for (type in obj) {
            if (type && typeof obj[type] === "function") {
                this.addEvent(type, obj[type]);
            }
        }
        return this;
    },
    addMutipleEvents: function (types, fn) {
        types = types instanceof Array ? types : [];
        var type;
        for (var i in types) {
            type = types[i]
            this.addEvent(type, fn);
        }
        return this;
    },
    fireEvent: function (type,data) {
        if (type && this._listener[type]) {
            var events = {
                type: type,
                target: this
            };

            for (var length = this._listener[type].length, start = 0; start < length; start += 1) {
                this._listener[type][start].call(this,data, events);
            }
        }
        return this;
    },
    fireEvents: function (array) {
        if (array instanceof Array) {
            for (var i = 0, length = array.length; i < length; i += 1) {
                this.fireEvent(array[i]);
            }
        }
        return this;
    },
    removeEvent: function (type, key) {
        var listeners = this._listener[type];
        if (listeners instanceof Array) {
            if (typeof key === "function") {
                for (var i = 0, length = listeners.length; i < length; i += 1) {
                    if (listeners[i] === listener) {
                        listeners.splice(i, 1);
                        break;
                    }
                }
            } else if (key instanceof Array) {
                for (var lis = 0, lenkey = key.length; lis < lenkey; lis += 1) {
                    this.removeEvent(type, key[lenkey]);
                }
            } else {
                delete this._listener[type];
            }
        }
        return this;
    },
    removeEvents: function (params) {
        if (params instanceof Array) {
            for (var i = 0, length = params.length; i < length; i += 1) {
                this.removeEvent(params[i]);
            }
        } else if (typeof params === "object") {
            for (var type in params) {
                this.removeEvent(type, params[type]);
            }
        }
        return this;
    }
};

  

posted @ 2018-07-13 14:56  黎明之光123  阅读(179)  评论(0编辑  收藏  举报