初识 js 实现自定义事件
2018-03-29 17:50
302 查看
之前写h5小游戏的时候,碰到了一种情况就是需要:当一个东西状态发生改变时,来执行相应的操作! 这就有点类似于dom事件,只不过这是原生的事件,然后就想着是不是可以自定义事件。查了相关资料,发现其实就是我之前看的设计模式一书里的观察者模式! 所以光看书是没有用的,还是得实战起来,才能化知识为力量,继续努力。
根据那时的理解是 绑定自定义事件就是建立一个事件的数组,往里放function, 当触发就是执行遍历数组里的方法,并且执行!!!下面就是我最简单的逻辑实现:
这样的话就实现最简单的自定义事件:
但是发现不能再callback里传参数了,部分修改下:
这还不是很完善,字面量写法暴露了属性和方法,而已容易被影响 最好还是用原型链实现比较好,
基本模式:
根据那时的理解是 绑定自定义事件就是建立一个事件的数组,往里放function, 当触发就是执行遍历数组里的方法,并且执行!!!下面就是我最简单的逻辑实现:
var myEvent={ on:function(eventName,callback){ if(!this.handles){ this.handles={} } if(typeof this.handles[eventName]==="undefined"){ this.handles[eventName]=[]; } if(typeof callback==="function"){ this.handles[eventName].push(callback); } return this; }, trigger:function(eventName){ if(this.handles[eventName]){ for(var i=0,len=this.handles[eventName].length;i<len;i++){ this.handles[eventName][i](); } } } }
这样的话就实现最简单的自定义事件:
myEvent.on("test",function(){ alert("test"); }); myEvent.trigger("test");
但是发现不能再callback里传参数了,部分修改下:
trigger:function(eventName){ if(this.handles[eventName]){ for(var i=0,len=this.handles[eventName].length;i<len;i++){ this.handles[eventName][i](argument[1]); } } }
myEvent.on("test",function(result){ alert(result); }); myEvent.trigger("test","alert一下");
这还不是很完善,字面量写法暴露了属性和方法,而已容易被影响 最好还是用原型链实现比较好,
基本模式:
function EventTarget(){ this.handlers = {}; } EventTarget.prototype = { constructor: EventTarget, addHandler: function(eventName, handler){ if (!this.handlers[eventName]){ this.handlers[eventName] = []; } this.handlers[eventName].push(handler); }, trigger:function(eventName){ if(this.handles[eventName]){ var handlers = this.handlers[eventName]; for(var i=0,len=handlers.length;i<len;i++){ this.handlers[eventName][i](argument[1]); } } }, removeHandler: function(eventName, handler){ if (this.handlers[eventName]){ var handlers = this.handlers[eventName]; for (var i=0, len=handlers.length; i < len; i++){ if (handlers[i] === handler){ break; } } handlers.splice(i, 1); } } };
相关文章推荐
- js学习心得之js的自定义事件-基于观察者模式的实现
- 利用自定义属性实现js点击事件 委托
- js屏蔽鼠标右键默认事件以实现自定义菜单
- js实现自定义事件
- js实现屏蔽默认快捷键调用自定义事件示例
- js利用trigger和bind实现自定义事件的定义和触发
- 原生js实现自定义事件
- Android系统下用js自定义gesture事件(仿ios实现移动端事件一致)
- js实现屏蔽默认快捷键调用自定义事件示例
- js实现touch移动触屏滑动事件
- 自定义JSP标签实现语言国际化(类似struts text标签),并同时支持图片、JS文件国际化
- SharePoint2010 自定义多语言切换与多语言实现 JS方式
- js模拟点击事件实现代码
- 主流JS框架中DOMReady事件的实现
- 用js实现的模拟jquery的animate自定义动画(2.5K)
- AJ学IOS 之微博项目实战(12)发送微博自定义工具条代理实现点击事件
- 自定义View绘制圆形实现触发事件(单指移动,多指缩放)
- javascript之自定义js封装库兼容主流浏览器实现DOM加载之后,页面完全加载之前执行js
- 用JS实现一个表单多个按钮的方法,两个onclick事件处理
- [转] 主流JS框架中DOMReady事件的实现