Event这个摸块大概用了1千行, 占源代码的1/9, 我知道代码量挺大 但是没想到就看一个绑定过程(边跟边记)就得花五六个小时…挺好的周末夜晚就这样到凌晨1点了…
这篇按时间顺序 说说jQ事件绑定还有event对象fix的流程
事件这块结构大概是这样:
1.外层: fn里有on,bind,live这些常用的接口
2.中间层: 上述接口会调用jQuery.event对象中的基础方法, 如add(). jQuery.event对象只是真正的执行者, 主要负责做(1)data缓存, (2)做兼容, (3)最终生成jQuery.Event实例 (4)dispatch执行
3.内层: jQuery.Event实例包装原生事件对象, 记录扩展的data, 记录执行函数结果等
绑定事件的核心就是用elem.addEventListener或elem.attachEvent绑定这个执行函数:1jQuery.event.dispatch.apply( eventHandle.elem, arguments )
触发时, 通过elem从cache中取出原生事件对象 并加工成jQ.Event实例, 放入执行队列, 通过此实例扩展data或带回执行结果.
零: 绑定的几种形式
|
|
一: 对外接口 fn.on
|
|
二: event.add实现绑定 (其实初始化时候, event做了很多兼容性的预处理, 在这个时间点之前, 这些这个本文最后贴出来)
|
|
三: event.dispatch事件触发
|
|
四: jQ.Event对象和对原生对象的修复 ( 这个出现时间点其实在第三步的中间 这样写比较清楚 )
|
|
附: special处理
|
|
|
|