diff --git a/h5/snake/lib/utils/events.js b/h5/snake/lib/utils/events.js index e6ed9bb..b21f5b6 100644 --- a/h5/snake/lib/utils/events.js +++ b/h5/snake/lib/utils/events.js @@ -8,56 +8,57 @@ */ export default class Events { - constructor() { - // 定义的事件与回调 - this.defineEvent = {}; - } - // 注册事件 - register(event, cb) { - if(!this.defineEvent[event]) { - (this.defineEvent[event] = [cb]); - } - else { - this.defineEvent[event].push(cb); - } - } - // 派遣事件 - dispatch(event, arg) { - if(this.defineEvent[event]) {{ - for(let i=0, len = this.defineEvent[event].length; i this.defineEvent[event].splice(i, 1), 0); - break; - } - } - } - } + constructor() { + // 定义的事件与回调 + this.defineEvent = {}; + } + // 注册事件 + register(event, cb) { + if (!this.defineEvent[event]) { + this.defineEvent[event] = [cb]; + } else { + this.defineEvent[event].push(cb); } - - // once 方法,监听一次 - once(event, cb) { - let onceCb = () => { - cb && cb(); - this.off(event, onceCb); + } + // 派遣事件 + dispatch(event, arg) { + if (this.defineEvent[event]) { + { + for (let i = 0, len = this.defineEvent[event].length; i < len; ++i) { + this.defineEvent[event][i] && this.defineEvent[event][i](arg); + } + } + } + } + // on 监听 + on(event, cb) { + return this.register(event, cb); + } + // off 方法 + off(event, cb) { + if (this.defineEvent[event]) { + if (typeof cb == "undefined") { + delete this.defineEvent[event]; // 表示全部删除 + } else { + // 遍历查找 + for (let i = 0, len = this.defineEvent[event].length; i < len; ++i) { + if (cb == this.defineEvent[event][i]) { + this.defineEvent[event][i] = null; // 标记为空 - 防止dispath 长度变化 + // 延时删除对应事件 + setTimeout(() => this.defineEvent[event].splice(i, 1), 0); + break; + } } - this.register(event, onceCb); + } } -} \ No newline at end of file + } + + // once 方法,监听一次 + once(event, cb) { + let onceCb = () => { + cb && cb(); + this.off(event, onceCb); + }; + this.register(event, onceCb); + } +}