js高级技巧----自定义事件

自定义事件

原本的事件处理的原理:事件是javascript与浏览器交互的主要途径。

事件是一种叫做观察者的设计模式

观察者模式由两类对象组成:主体和观察者。

主体用于发布事件;

观察者通过订阅这些事件来观察该主体。

自定义事件的原理:

将事件处理程序保存在一个数组中;

当添加事件的时候,我们push进去这个事件处理函数;

当我们执行的时候,从头遍历这个数组中的每个事件处理函数,并执行。

自定义事件应该具有的内容:

1.一个handler对象,对象中保存着存放事件处理函数的数组

handler = {

‘click’ : [func1,func2],

‘my’ : [func3,func4]

}

2.一个addhandler函数,用于添加事件处理函数

3.一个removehandler函数,用于删除事件处理函数

4.一个fire函数,用于执行所添加的函数。

注:使用原型模式来创建自定义事件对象。

代码如下:

 1 function EventTarget(){
 2     /*
 3     * handlers:用来存储时间处理程序
 4     */
 5     this.handlers = {};
 6 }
 7 EventTarget.prototype = {
 8     constructor : EventTarget,
 9     /*
10     * addHandler:用于注册给定类型事件的事件处理程序
11     * type:自定义的事件类型,任意字符串
12     * handler:自定义的事件处理函数
13     */
14     addHandler : function( type,handler ){
15         if( typeof this.handlers[type] == "undefined" ){
16             this.handlers[type] = [];
17         }
18         this.handlers[type].push( handler );
19     },
20     /*
21     * fire:用于触发一个事件
22     * event:是一个事件对象,可以自定义它拥有的属性
23     */
24     fire : function( event ){
25         if( !event.target ){
26             event.target = this;
27         }
28         if( this.handlers[event.type] instanceof Array){
29             var handlers = this.handlers[event.type];
30             for( var i=0,len=handlers.length;i<len;i++ ){
31                 handlers[i]( event );
32             }
33         }
34     },
35     /*
36     * removeHandler:用于注销某个事件类型的事件处理程序
37     */
38     removeHandler : function( type,handler ){
39         if( this.handlers[type] instanceof Array ){
40             var handlers = this.handlers[type];
41             for( var i=0,len=handlers.length;i<len;i++ ){
42                 if( handlers[i] == handler){
43                     break;
44                 }
45             }
46             handlers.splice( i,1 );
47         }
48     }
49 }

扩展:(详细参见http://www.zhangxinxu.com/wordpress/?p=2330

DOM自定义事件:如为某个元素添加一个自定义的事件。

基本格式如下:

var $ = function(el) {

return new _$(el);

};

var _$ = function(el) {

this.el = el;

};

_$.prototype = {

constructor: this,

addEvent: function() {  // ...},

fireEvent: function() {  // ... },

removeEvent: function() {  // ... }

}

于是我们就可以使用类似$(dom).addEvent()的语法为元素添加事件

重点:fireEvent()方法

1.对于标准浏览器

eve = document.createEvent( ‘HTMLEvents’ ):返回新创建的event对象

eve.initEvent( eventType,canBubble ,preventDefault  ):初始化对象

element.dispatchEvent( eve ):在元素上触发事件

(注:关于creatEvent()更多说明参考:http://blog.csdn.net/jxst051665/article/details/3931598

 2.对于IE浏览器

"propertychange"事件,就是属性改变即触发的事件

代码地址:https://github.com/xiaoxiaojing/practiseCode/blob/master/advancedSkills/custom_event.js

参考文章:http://www.zhangxinxu.com/wordpress/?p=2330

参考书籍:《js高级程序设计》

时间: 2024-11-03 22:18:50

js高级技巧----自定义事件的相关文章

js的自定义事件

js中的事件是js的一大技术点,说白了就是操作dom树的唯一途径. 关于事件无非两种绑定方式: document.getElementById('xxx').onclick = function(){ } document.getElementById("xxx").addEventListener("click", function(){ }); 前者和后者的区别无非就是绑定一个和多个,当多次绑定相同元素的时候,前者会覆盖,后者不会覆盖. 下面我们来看看如何自定义

JS中自定义事件的使用与触发

1. 事件的创建 JS中,最简单的创建事件方法,是使用Event构造器: var myEvent = new Event('event_name'); 但是为了能够传递数据,就需要使用 CustomEvent 构造器: var myEvent = new CustomEvent('event_name', { detail:{ // 将需要传递的数据写在detail中,以便在EventListener中获取 // 数据将会在event.detail中得到 }, }); 2. 事件的监听 JS的E

漫谈js自定义事件、DOM/伪DOM自定义事件

一.说明.引言 我JS还是比较薄弱的,本文的内容属于边学边想边折腾的碎碎念,可能没什么条理,可能有表述不准确的地方,可能内容比较拗口生僻.如果您时间紧迫,或者JS造诣已深,至此您就可以点击右侧广告(木有?则RSS或盗版)然后撤了. 事件是个大课题,真要从断奶开始讲起的话,可以写个12期的连载.关于JS事件的文章(类似DOM/BOM事件模型,IE与其他浏览器事件差异,DOM1/DOM2事件定义等)落叶般随处可见.熟豆子反复炒一点意思都没有,因此,这里谈谈自己感兴趣的自定义事件以及周边. 所谓自定义

js自定义事件、DOM/伪DOM自定义事件

一.说明.引言 我JS还是比较薄弱的,本文的内容属于边学边想边折腾的碎碎念,可能没什么条理,可能有表述不准确的地方,可能内容比较拗口生僻.如果您时间紧迫,或者JS造诣已深,至此您就可以点击右侧广告(木有?则RSS或盗版)然后撤了. 事件是个大课题,真要从断奶开始讲起的话,可以写个12期的连载.关于JS事件的文章(类似DOM/BOM事件模型,IE与其他浏览器事件差异,DOM1/DOM2事件定义等)落叶般随处可见.熟豆子反复炒一点意思都没有,因此,这里谈谈自己感兴趣的自定义事件以及周边. 所谓自定义

js中事件(自定义事件)

今天闲的蛋疼,我们来聊一聊web前端中的事件机制和自定义事件.灵感来自jQuery,在此感谢jQuery作者. 首先,最开始. <button id="button" type="button" onclick="alert('hello')">你好</button> 这是我们在使用html写页面的时候最原生的事件触发方式.上面那行代码会生成一个按钮,当我们点击这个按钮的时候就会弹出一个原生的弹窗,内容是hello. 随着

js自定义事件的实现探索

我们一般所熟悉的事件,都是这样的:onclick,onmouseover,ontouchstart,onfocus... 但这里要讨论自定义事件的实现,包含:事件注册/监听.事件分发. 有两种方式去实现: 自己实现事件管理器:CustomEventManager 使用document.createEvent 先说第一种方式 CustomEventManager的实现 要实现一个完整的事件体系,必须包含2大功能:注册/监听.触发,用伪代码表示: function CustomEventManage

js自定义事件模式

---恢复内容开始--- js事件用的最多的就是默认事件.不过有时候需要自定义事件来使用. 参照默认事件的模式,例如click事件,鼠标点击dom,先触发click事件,然后执行dom上的事件处理程序. <p>点我</p> document.getElementByTagName('p')[0].addEventLisener('click',()=>{ alert('click'); }) 同理,自定义事件也需要三个部分,即事件注册.事件触发.处理程序. 这里使用原型方法做

谈谈JS的观察者模式(自定义事件)

呼呼...前不久参加了一个笔试,里面有一到JS编程题,当时看着题目就蒙圈...后来研究了一下,原来就是所谓的观察者模式.就记下来...^_^ 题目 [附加题] 请实现下面的自定义事件 Event 对象的接口,功能见注释(测试1) 该 Event 对象的接口需要能被其他对象拓展复用(测试2) // 测试1 Event.on('test', function (result) { console.log(result); }); Event.on('test', function () { cons

js事件、自定义dom事件、自定义事件

本文参考资料是:高级编程语言第三版(13章事件和22章自定义事件). 本文涉及到: 事件的组成元素. 事件优化. 模拟事件. 自定义事件的内容 js事件是什么?高级程序13章第一句话说:js与html之间的交互是通过事件实现的.事件是浏览器或者用户自身执行的某种动作,例如我们最常用到的点击事件. 1:js事件 事件流 事件处理程序 事件对象 事件类型 事件流:从页面上接收事件的顺序 事件冒泡:概念事件从最具体的元素接收事件,然后逐级向上传播到较为不具体的元素.这个概念是由ie提出. <!DOCT