AirJD 焦点
AirJD

没有录音文件
00:00/00:00
加收藏

jQuery1.6事件架构

发布者 snandy   简介 JD前端工程师
主页 http://snandy.cnblogs.com  发布于 1432017067873  浏览 4238 关键词 架构, 前端, JavaScript 
分享到

第1页

jQuery1.6事件架构
@snandy  2015.5

第2页

内容
事件概述
添加事件
删除事件
派发事件
事件委托
事件对象

第3页

1 jQuery事件概述
35个公开的方法(11+24)
添加事件30个(6+24)
删除事件3个(3)
派发事件26个(2+24)

第4页

1.1 jQuery事件模块鸟瞰图

第5页

2 添加事件(30个方法)
jQuery为添加事件提供了30个方法,其中6个基本方法,24个快捷方法。添加事件内部的核心方法是jQuery.event.add。

第6页

2.1  六个基本方法
bind 基本的添加事件函数
one  添加只执行一次的事件函数
live   事件代理(使用document代理)
delegate  事件代理(使用指定元素代理)
hover  模拟css的hover (内部使用mouseenter,mouseleave)
toggle  显示/隐藏

第7页

2.2 内部调用逻辑 
bind/one/live 都是使用内部的jQuery.event.add 来完成事件添加
delegate 内部调用的是live
hover 内部调用mouseenter/mouseleave,而mouseenter/mouseleave又调用bind
toggle 内部调用click,而click内部又调用的是bind

第8页

2.3 调用拓扑图

第9页

2.4  24个快捷方法

第10页

2.5  一个each搞定24个方法

第11页

3 删除事件(3个方法)
删除事件有三个方法,内部核心方法是jQuery.event.remove。
unbind / bind
die / live
undelegate / delegate

第12页

3.1 内部调用逻辑
unbind 是删除事件基础方法。可删除一个指定handler,还可删除某类型事件的全部handler,甚至可删除挂在element上的全部事件。其内部调用jQuery.event.remove。
die/undelegate 是删除代理事件,两者内部都调用了unbind。

第13页

3.2 内部调用逻辑图

第14页

4 派发事件(26个方法)
派发事件有2个基本方法和24个快捷方法,内部核心方法是jQuery.event.trigger。

两个基础方法(trigger/triggerHander)
24个快捷方法(click/mouseover/…)

第15页

4.1 两个基本方法
trigger
执行事件hanlder
执行冒泡
执行默认行为
triggerHandler
执行事件handler
不冒泡
不执行默认行为

第16页

4.2  内部调用逻辑
trigger/triggerHandler 内部调用的都是jQuery.event.trigger
click/mouseover/等快捷方法内部调用trigger

第17页

4.3  派发事件内部调用逻辑图

第18页

4.4 24个快捷方法
 同2.4添加事件快捷方法

第19页

5 事件委托
利用浏览器中事件的冒泡(event bubbling)和事件源(target || srcElement)

第20页

5.1 事件委托的优点
需要管理的handler更少
占用的内存更少(创建的驻留在内存中的handler少了)
DOM元素与代码更少的绑定
DOM变更后(如添加或删除节点)无须重新绑定事件处理器

第21页

5.2 事件委托的不足
并非所有的事件都能冒泡,如load, change, submit, focus, blur(jQuery实现了focus/blur)
代理元素的handler管理复杂
不好模拟用户触发事件(jQuery已实现)

第22页

5.3 jQuery的事件委托API
live使用document对象代理事件
delegate为特定元素代理事件(粒度细)
die解除通过live代理的事件
undelegate解除通过delegate代理的事件

第23页

6 事件对象
包装后的事件对象 jQuery.Event的实例

第24页

6.1 事件对象API统一为W3C标准
target
currentTarget
stopPropagation
preventDefault
stopImmediatePropagation
isDefaultPrevented
isPropagationStopped
isImmediatePropagationStopped

第25页

6.2 事件对象上增加的属性
namespace
result
data
originalEvent


第26页

END
支持文件格式:*.pdf
上传最后阶段需要进行在线转换,可能需要1~2分钟,请耐心等待。