位置: 编程技术 - 正文

jQuery-1.9.1源码分析系列(十)事件系统之事件体系结构(jquery fadein 源码)

编辑:rootadmin

推荐整理分享jQuery-1.9.1源码分析系列(十)事件系统之事件体系结构(jquery fadein 源码),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:jquery源码是什么水平,jquery.min.js源代码,jquery源码实现原理,jquery源码是什么水平,jquery.min.js源代码,jquery fadein 源码,jquery源码是什么水平,jquery源码实现原理,内容如对您有帮助,希望把文章链接给更多的朋友!

又是一个重磅功能点。

  在分析源码之前分析一下体系结构,有助于源码理解。实际上在jQuery出现之前,Dean Edwards的跨浏览器AddEvent()设计做的已经比较优秀了;而且jQuery事件系统的设计思想也是基于该思想的,所以我们先分析一下Dean Edwards前辈的事件绑定。

a. jQuery事件原型——Dean Edwards的跨浏览器AddEvent()设计

  源码解读

重新梳理一下数据结构,使用一个例子

  经过addEvent()函数之后,当前的数据结构为:

  事件系统会根据调用addEvent的顺序给每个响应函数(也就是addEvent(element, type, handler)中的第三个参数handler)打上标记$$guid。源码

  最终三个响应函数的$$guid标记分别是

  f1.$$guid = 1  f2.$$guid = 2  f3.$$guid = 3

  而根据源码中

  那么某一个函数在任何事件响应函数集合中的下标位置是固定的。比如click和change事件都调用f3作为响应事件,那么f3在element.events.click以及element.events.change中的下标位置都是f3.$$guid = 3;即element.events.click[3] = element.events.change[3] = f3。

  这个时候假设又新添了一个事件绑定:addEvent(dom,"focus",f3);那么element.events.focus[3] = f3;这也是对象相比于数组的方便之处,数组不可能没有下标0,1,2就直接有3了,但是对象却可以,此时3是作为对象的一个属性名称。

  这样的设计,其实已经具备了jquery事件系统的雏形,包含了几个最主要的特点:

jQuery-1.9.1源码分析系列(十)事件系统之事件体系结构(jquery fadein 源码)

  1)element上的所有事件,将保存到element.events属性中,不是直接绑定到element上;这样一个事件可以有无数个响应函数。

  2)handleEvent作为element所有事件的“主监听函数”,有它统一管理element上的所有函数。

  3)所有浏览器都支持element["on" + type]事件绑定方式,跨浏览器兼容。

  好啦,明白了addEvent的事件结构,这个想法确实让人觉得眼前一亮。下面分析jQuery的事件结构

b. jQuery的事件结构

  所有的函数添加事件都会进入jQuery.event.add函数。该函数有两个主要功能:添加事件、附加很多事件相关信息。我们直接上源码,源码思想和Dean Edwards的跨浏览器兼容事件添加处理类似。

  源码分析

  依然用实例来说明jQuery的事件结构

  经过添加处理环节,事件添加到了元素上,而且节点对应的缓存数据也添加了相应的数据。结构如下

  jQuery的处理和Dean Edwards的跨浏览器兼容事件添加处理类似,比如为每一个函数添加guid;使用events对象存放响应事件列表,有一个总的事件处理入口handle等。

  jQuery做了哪些改进?

  1)事件数据不再直接保存在节点上,而是使用jQuery缓存系统内(内部使用的缓存jQuery._data方式存取)

  2)事件委托:绑定到当前节点(例子中当前节点是document根节点)的处理函数不仅仅包含当前节点触发事件(click)响应时处理的事件(例子中selector为undefined时对应的处理函数dot);还代理了其他节点(例子中的#center节点)触发事件(click)响应时处理的事件(例子中selector为"#center"对应的处理事件doHandler和dot);委托机制在后续分析。

  3)增加了很多功能数据,比如命名空间namespace:这个主要用在自定义事件自定义触发,比如$(document).on("chua.click",'#center',dot),主动触发$("#center").trigger("chua.click")。还有额外数据data:虽然没有看到那个地方有被用到。

  到此jQuery的事件结构就清楚了。后面再分析事件的绑定和触发以及委托原理。

jquery实现表格隔行换色效果 本文实例讲述了jquery实现表格隔行换色效果的代码。分享给大家供大家参考。具体如下:运行效果截图如下:具体代码如下:1、新建一个web项目,jQuery

jquery通过扩展select控件实现支持enter或focus选择的方法 本文实例讲述了jquery通过扩展select控件实现支持enter或focus选择的方法。分享给大家供大家参考,具体如下:/****************************************@authorjdkleo*@da

Jquery实现仿京东商城省市联动菜单 本文实例讲述了Jquery实现仿京东商城省市联动菜单的简单实例代码。分享给大家供大家参考。具体如下:运行效果截图如下:具体代码如下:!doctypehtmlht

标签: jquery fadein 源码

本文链接地址:https://www.jiuchutong.com/biancheng/370542.html 转载请保留说明!

上一篇:jQuery 1.9.1源码分析系列(十)事件系统之绑定事件(jquery animate源码)

下一篇:jquery实现表格隔行换色效果(jquery操作表格)

  • 外资企业内资企业
  • 工商注册经营部和公司的区别
  • 出口商品认证
  • 汽车加油增值税发票
  • 过路费按照什么缴纳增值税
  • 记账软件收费吗
  • 小规模纳税人报销会计分录
  • 企业报税盘入账应该记入哪个科目
  • 那些情况可以申请退税
  • 中外合作合资
  • 长期股权投资的4个明细科目
  • 房地产开发精装房是国家规定吗
  • 股权转让交的税如何做账
  • 个人承包经营所得是什么意思
  • 专家咨询费模板
  • 存货跌价准备转回的条件有哪些
  • 减免税款为什么在借方
  • 单位没车能用停车票不能用加油票吗?
  • 进项发票可以抵扣吗
  • 员工旅游费需要缴纳个人所得税吗
  • 个体户需不需要银行开户
  • 未按规定期限办理身份证
  • 开了发票未收款
  • 专票红冲分录
  • 企业资产利润率计算公式
  • 提现属于支出吗
  • 收到购货方退回的发票联和抵扣联如何处理?
  • 增加资产的会计科目
  • 将自产产品无偿赠送税务处理
  • 如何分析财务报表看企业经营情况
  • 购入黄金产品怎么入账
  • mac键盘图标与对号不一致
  • url是什么格式的文件怎么打开
  • 贷款减值损失计提还能转回吗
  • autoreg.exe
  • PHP:finfo_set_flags()的用法_fileinfo函数
  • 设备经营租赁属于什么行业
  • 夸克到底有什么用
  • 亏损企业所得税汇算清缴怎么做
  • php获取目录所有文件
  • 基于个人同意处理个人信息的个人什么撤回其同意
  • convwthn如何定义
  • netconf over ssh
  • python字典删除键值对方法
  • 产权转移数据印花税计税依据含不含增值税
  • 现金销售商品的会计分录
  • 托盘账务处理
  • 计提工资薪金
  • 织梦怎么用
  • 记账王怎么打开以前的账套
  • 预缴增值税附加税需要计提吗
  • 信息科技领域的违法犯罪行为
  • 商业承兑汇票怎么做账
  • 差旅津贴和差旅补贴需要申报个税吗?
  • 汽车4s店费用预算
  • 收到专票未抵扣能购买方开红字发票吗
  • 补记式余额调节法怎么写项目
  • 公司向个人借款是否合法
  • win10周年版
  • windowsxp文件
  • Windows文件夹共享权限不足
  • mac z
  • 2021年win10累积更新
  • linux命令怎么执行
  • win7开机提示音在哪里关闭
  • Linux Shell 通配符、元字符、转义符使用实例介绍
  • linux支持哪些类型的设备
  • bootstrap栅格布局
  • Coroutine couldn't be started because the the game object 'GameController' is inactive!
  • [置顶]JM259194
  • Node.js中的construct构造函数
  • nodejs的http
  • unity的shader用法
  • shell脚本关闭指定程序
  • 有效的沟通的好处
  • python裁剪不规则区域
  • javascript标签大全
  • 浙江电子税务局网上开票
  • 京东发票税号是几位数
  • 大兴区地方税务局
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设