位置: 编程技术 - 正文

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操作表格)

  • 利息可以抵税是什么意思
  • 账账核对的基本内容
  • 去税务局开增值税专用发票需要缴费吗
  • 装修公司财务报销制度和流程
  • 股票股利的资金来源
  • 百旺税控盘汇总表怎么看
  • 幼儿园伙食收支盈亏比例
  • 贸易公司的印花税税率是多少
  • 超范围经营如何举报
  • 计算企业所得税不得扣除的项目
  • 专项维修资金的,由县级
  • 税务局每年都会大数据抽查吗
  • 增值税一般纳税人认定标准
  • 91开头的税号是什么
  • 分公司非独立核算是什么意思
  • 进项税抵扣需要做分录吗
  • 食堂费用没有发票能挂账吗
  • 补提以前年度费用在年度报表中怎么填
  • 企业研发活动中心职责
  • c盘空间变小的原因
  • macbook右上角
  • 华为手机hms提醒
  • 应交税金月底可以有余额吗
  • 收到别人押金的会计分录
  • pc端微信怎么更新
  • php?ms=0&qgg=&_wv=3
  • 重置edge浏览器设置
  • php ftp上传文件
  • uview2.0封装http请求实战以及常见请求传参实录
  • PHP:pg_affected_rows()的用法_PostgreSQL函数
  • 保险中介手续费规定最新
  • 什么公司可以开专票
  • 什么是技术服务工程师
  • 存放同业属于什么会计制度
  • Yii2中SqlDataProvider用法示例
  • 合同印花税可以年底报一次
  • 金税盘如何读入新购电子发票?
  • 房屋出租怎么开电子发票
  • centos离线安装mondo
  • 个人所得税退税退多少钱怎么算
  • 固定资产原值增加当月计提折旧吗
  • 商品流通企业采购费用
  • MSSQL output使用
  • 应交税费已交税金是什么意思
  • 个人所得税要计入管理费用吗
  • 福利用什么表示
  • 预付款项怎么做分录
  • 公司闲置房屋出租合法吗
  • 网银退回是什么意思
  • 工程款项目的发包人是谁
  • 制造费用如何结转生产成本
  • 公司基本户可以取现金吗
  • 组织机构代码证图片
  • 企业如何建账做账
  • 如何设置物资采集系统
  • 数据库性能优化方法论和最佳实践
  • linux下多个mysql5.7.19(tar.gz)安装图文教程
  • Win2008 R2 mysql 5.5 zip格式mysql 安装与配置
  • Vista下WMC不能播放RMVB解决办法
  • vmware安装redhat6.5
  • freebsd常用命令
  • sysscjh.exe是什么文件
  • windows 托盘
  • 如何将win10系统从c盘迁移到d盘
  • NJeeves.exe - NJeeves进程文件是什么意思 有什么用
  • win7 64位系统使用360安全浏览器在网页中播放视频出现花屏的解决方法
  • win10系统代理在哪
  • win7访问共享文件夹没有权限访问
  • java美化按钮
  • Android---60---Notification 通知栏的简单使用
  • jQuery Password Validation密码验证
  • css中清除浮动的方法
  • jquery插件使用教程
  • python语言怎么用
  • js实现聊天框
  • 厦门怎么查询自己名下电动自行车
  • 国家税务总局网站登录入口官网
  • 中国的消费税率是多少
  • 税务筹划企业所得税案例分析题
  • 财税知识
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设