- 浏览: 520956 次
- 性别:
- 来自: 北京
博客专栏
-
jQuery技术内幕
浏览量:200704
最新评论
-
青春依旧:
学习html5哪里好?当然华清远见是首选!
[原创] jQuery源码分析-01总体架构 -
追梦1819:
[size=x-small][color=red][/colo ...
[原创] jQuery源码分析-04 选择器-Sizzle-设计思路 -
niuqiang2008:
学习学习
[原创] jQuery源码分析-04 选择器-Sizzle-工作原理 -
liuweihug:
jquery 解析正则表达式及常见的Regex规则和表达式 - ...
[原创] jQuery源码分析-02正则表达式-RegExp-常用正则表达式 -
liang8768:
mark!!!
[原创] jQuery源码分析-00前言开光
作者:nuysoft/高云 QQ:47214707 EMail:nuysoft@gmail.com
声明:本文为原创文章,如需转载,请注明来源并保留原文链接。
10.2 源码结构
jQuery的事件模块主要包含以下内容:
|
子模块 |
接口 |
1 |
事件管理工具函数 |
jQuery.event.add/remove/trigger/handle/fix/special |
2 |
事件对象 |
jQuery.Event(模拟实现部分DOM3事件接口) |
3 |
事件特例 |
ready live beforeunload mouseenter mouseleaver(修正为 mouseover mouseout) focusin focusout submit change(浏览器不支持的冒泡事件) |
4 |
事件绑定、删除、触发 |
bind one delegate live die unbind undelegate die trigger triggerHandler |
5 |
便捷事件和扩展方法 |
toggle hover等 |
看看源码结构:
// ---------------------------------------------------------------------------- // ①事件管理工具函数 // ----------------------------------------------------------------------------
jQuery.event = { // 绑定事件句柄 add: function( elem, types, handler, data ) {}, // 删除 remove: function( elem, types, handler, pos ) {}, // 触发 trigger: function( event, data, elem, onlyHandlers ) {}, // 执行 handle: function( event ) {}, // 事件属性 props: "altKey attrChange attrName bubbles button cancelable charCode clientX clientY ctrlKey currentTarget data detail eventPhase fromElement handler keyCode layerX layerY metaKey newValue offsetX offsetY pageX pageY prevValue relatedNode relatedTarget screenX screenY shiftKey srcElement target toElement view wheelDelta which".split(" "), // 使用jQuery.Event封装原始事件,并修正属性 fix: function( event ) {}, // 事件特例,共九个:ready live beforeunload mouseenter mouseleaver focusin focusout submit change special: { ready: {}, live: {}, beforeunload: {} } };
// ---------------------------------------------------------------------------- // ②jQuery事件对象,模拟实现部分W3C标准的DOM 3级别事件模型,统一了事件的属性 // ----------------------------------------------------------------------------
jQuery.Event = function( src, props ) {}; // jQuery事件对象原型 jQuery.Event.prototype = { // 阻止默认浏览器默认行为 preventDefault: function() {}, // 停止事件传播 stopPropagation: function() {}, // 立即停止事件传播 stopImmediatePropagation: function() {}, // 是否已阻止浏览器默认行为 isDefaultPrevented: returnFalse, // 是否已停止事件传播 isPropagationStopped: returnFalse, // 是否已立即停止事件传播 isImmediatePropagationStopped: returnFalse };
// ---------------------------------------------------------------------------- // ③事件特例 // ----------------------------------------------------------------------------
// 创建mouseenter mouseleave事件,将mouseenter修正为mouseover,mouseleave修正为mouseout jQuery.each({ mouseenter: "mouseover", mouseleave: "mouseout" }, function( orig, fix ) {});
// submit事件代理,如果不支持submit事件冒泡 if ( !jQuery.support.submitBubbles ) {}
// change事件代理,如果不支持change事件冒泡 if ( !jQuery.support.changeBubbles ) {}
// 触发元素elem上指定类型type的事件句柄和默认行为 function trigger( type, elem, args ) {}
// 如果不支持focusin事件冒泡,则转为focus实现(focusin → focus, focusout → blur) if ( !jQuery.support.focusinBubbles ) { jQuery.each({ focus: "focusin", blur: "focusout" }, function( orig, fix ) {}); }
// ---------------------------------------------------------------------------- // ④事件绑定、删除、触发 // ----------------------------------------------------------------------------
// 在匹配的元素上绑定指定类型的事件处理函数 jQuery.each(["bind", "one"], function( i, name ) { jQuery.fn[ name ] = function( type, data, fn ) {}; });
jQuery.fn.extend({ // 解绑定:删除一个之前附加的事件句柄 unbind: function( type, fn ) {}, // 事件代理,调用live方法实现 delegate: function( selector, types, data, fn ) {}, // 删除事件代理,调用unbind或die实现 undelegate: function( selector, types, fn ) {}, // 执行事件处理函数和默认行为 trigger: function( type, data ) {}, // 执行事件处理函数,不执行默认行为,只触发匹配的第一个元素,不返回jQuery对象 triggerHandler: function( type, data ) {}, // 在匹配的元素绑定两个或更多的事件处理函数,点击事件触发时,这些函数顺序依次循环执行 toggle: function( fn ) {}, // 便捷方法,在匹配的元素上绑定两个事件处理函数,鼠标移入时执行handlerIn,移出时执行handlerOut hover: function( fnOver, fnOut ) {} });
// live 在匹配当前选择器的元素上绑定一个事件处理函数,包括已经存在的,和未来添加的,即任何添加的元素只要匹配当前选择器就会被绑定事件处理函数 // die 移除用live附加的一个或全部事件处理函数 jQuery.each(["live", "die"], function( i, name ) {}); // live执行句柄 function liveHandler( event ) {} // 在live事件类型type后增加上selector,作为命名空间 function liveConvert( type, selector ) {}
// ---------------------------------------------------------------------------- // ⑤常用事件的便捷接口,绑定或触发 // ----------------------------------------------------------------------------
jQuery.each( ("blur focus focusin focusout load resize scroll unload click dblclick " + "mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave " + "change select submit keydown keypress keyup error").split(" "), function( i, name ) { // Handle event binding jQuery.fn[ name ] = function( data, fn ) { return arguments.length > 0 ? this.bind( name, data, fn ) : this.trigger( name ); }; // 将事件名注册(添加)到jQuery.attrFn,当遇到对同名属性的操作时,转换为对事件接口的调用 if ( jQuery.attrFn ) { jQuery.attrFn[ name ] = true; } }); |
未完待续
- _原创__jQuery源码分析-10事件处理-Event-源码结构.pdf (268.3 KB)
- 下载次数: 123
发表评论
-
[原创] jQuery源码分析-04 选择器-Sizzle-设计思路
2011-11-14 20:59 6848作者:nuysoft/高云 QQ:47214707 Em ... -
[原创] jQuery源码分析-04 选择器-Sizzle-工作原理
2011-11-13 23:45 7881作者:nuysoft/高云 QQ:47214707 EM ... -
[原创] jQuery源码分析-02正则表达式-RegExp-常用正则表达式
2011-10-27 01:29 46633作者:nuysoft/JS攻城师/ ... -
[原创] jQuery源码分析-jQuery中的循环技巧
2011-10-27 00:36 14546作者:nuysoft/JS攻城师/高云 QQ:47214707 ... -
[原创] jQuery源码分析-10事件处理-Event-DOM-ready
2011-10-20 01:20 10598作者:nuysoft/JS攻城师/ ... -
[原创] jQuery源码分析-Java工程师应该向jQuery学习的8点建议
2011-10-18 23:56 12245作者:nuysoft/高云 QQ:47214707 EM ... -
[原创] jQuery源码分析-10事件处理-Event-事件绑定与删除-bind/unbind+live/die+delegat/undelegate
2011-10-18 22:31 15664作者:nuysoft/高云 QQ:47214707 EM ... -
[原创] jQuery源码分析-07数据缓存-Cache
2011-10-13 19:55 12129作者:nuysoft/高云 QQ:47214707 EMail ... -
[原创] jQuery源码分析-06浏览器测试-Support
2011-10-13 19:19 9898作者:nuysoft/高云 QQ:47214707 EMail ... -
[原创] jQuery源码分析系列目录(持续更新)
2011-10-12 12:30 29350作者:nuysoft/高云 QQ:47214707 E ... -
[原创] jQuery源码分析-10事件处理-Event-概述和基础知识
2011-10-12 00:16 12006作者:nuysoft/高云 Q ... -
[原创] jQuery源码分析-08队列 Queue
2011-10-10 23:48 10788作者:nuysoft/高云 Q ... -
[原创] jQuery源码分析-03构造jQuery对象-工具函数
2011-09-29 23:21 29778作者:nuysoft/高云 QQ:47214707 E ... -
[原创] jQuery源码分析-15AJAX-类型转换器
2011-09-29 02:25 7403作者:nuysoft/高云 QQ:47214707 EM ... -
[原创] jQuery源码分析-03构造jQuery对象-源码结构和核心函数
2011-09-28 02:20 52960作者:nuysoft/高云 QQ:47214707 EMail ... -
[原创] jQuery源码分析-如何做jQuery源码分析
2011-09-27 00:22 14994近期在ITEYE陆续写了几篇jQuery源码分析,乐在其 ... -
[原创] jQuery源码分析-17尺寸和大小 Dimensions & Offset
2011-09-25 22:05 7046边读边写,不正确的地方,还请各位告诉我,多多交流共同学习, ... -
[原创] jQuery源码分析-15AJAX-前置过滤器和请求分发器
2011-09-23 00:09 13274边读边写,不正确的 ... -
[原创] jQuery源码分析-00前言开光
2011-09-21 23:42 46999jQuery源码分析 - 前言 jQuery凭借简洁的语法和 ... -
[原创] jQuery源码分析-01总体架构
2011-09-21 23:31 751271. 总体架构 1.1 自调用匿名函 ...
相关推荐
对于事件的操作无非是addEvent,fireEvent,removeEvent这三个事 件方法。一般lib都会对浏览器的提供的函数做一些扩展,解决兼容性内存泄漏等问题。第三个问题就是如何得到domReady的状态。 6.1 event的包裹 浏览器的...
《jQuery源码分析——魔术方法》 jQuery,作为一款广泛使用的JavaScript库,以其简洁的API和强大的功能赢得了开发者们的喜爱。在深入理解jQuery的工作原理时,我们常常会遇到一些“魔术方法”,这些方法在特定场景...
### jQuery源码分析关键知识点详解 #### 一、前言 在深入了解jQuery源码之前,有必要先简要介绍一下jQuery的基本情况及其对JavaScript编程领域的重要意义。jQuery作为一个轻量级、功能丰富的JavaScript库,在Web...
jQuery源码分析 00 前言开光 01 总体架构 03 构造jQuery对象-源码结构和核心函数 03 构造jQuery对象-工具函数 05 异步队列 Deferred 08 队列 Queue 09 属性操作 10 事件处理-Event-概述和基础知识 15 AJAX-前置过滤...
3. **事件处理(Event Handling)**:jQuery 的事件处理比原生JavaScript更简洁,例如 `click(function(){...})` 用于绑定点击事件,`on()` 方法可以绑定多种事件,`off()` 方法则用于移除事件绑定。 4. **动画...
此外,`jQuery.Event`构造函数的源码也揭示了如何处理时间和戳,确保即使原始事件没有时间戳,也会有一个当前时间戳供后续处理使用。 通过以上分析,我们可以看到jQuery如何通过事件包装来增强浏览器原生事件,提供...
在分析jQuery-1.9.1事件系统之事件体系结构的源码之前,先了解该事件体系的背景和基本设计是非常有帮助的。jQuery的事件系统,特别是1.9.1版本,它在很大程度上受到了DeanEdwards的跨浏览器AddEvent()设计的影响。...
Jquery1.26版本的源码分析,pdf格式文档,相当清淅的书籍,前端开发者必看的类库书籍,...采用CSS方式查找Dim节点,jQuery类数组的分析,Dom元素的属性及操作,Event事件分析及应用,jquery中的Ajax实现及源码分析等内容.
jQuery源码分析系列涉及了对jQuery库内部实现的详细解读,jQuery作为前端开发中最常用的JavaScript库之一,它简化了DOM操作、事件处理、动画效果和AJAX交互等操作。通过深入分析jQuery的源码,开发者可以学习到先进...
《jQuery源码详细分析中文注释》是一份深入解析jQuery库源码的宝贵资源,它为开发者提供了理解这个广泛使用的JavaScript库内部工作机制的机会。jQuery以其简洁的API和强大的功能深受前端开发者的喜爱,但其背后的...
通过以上分析,我们可以了解到jQuery事件系统的内部工作原理,包括如何阻止事件冒泡、如何触发事件以及处理特殊事件的方式。这对于理解和优化jQuery代码,以及在开发中更有效地使用事件处理具有重要意义。在实际应用...
8. 事件处理(Event):简化了事件监听器的添加、移除和触发等操作。 9. 选择器(Sizzle):jQuery所使用的CSS选择器引擎,允许用户使用复杂的CSS选择器进行元素匹配。 10. DOM遍历与操作:提供了一系列遍历DOM树...
《jQuery源码解析:深入理解JavaScript库之精髓》 jQuery,作为一款广泛应用于Web开发的JavaScript库,以其简洁、易用的API深受开发者喜爱。它极大地简化了DOM操作、事件处理、动画效果以及Ajax交互等任务,使得...
深入学习jQuery源码,不仅可以提升JavaScript技能,还能理解如何优化DOM操作、事件处理和动画效果。这对于开发自己的JavaScript库或框架,或者进行性能优化,都大有裨益。同时,jQuery的设计模式,如模块化、插件化...
- 案例分析:解构一个使用 jQuery 实现的网页,了解其背后的逻辑和代码结构。 - 故障排查:学习如何调试 jQuery 代码,找出并修复问题。 通过这个主题的学习,你将能够熟练掌握 jQuery 的基本操作,并能运用到...
《jQuery 1.2.6 源码分析》 jQuery是JavaScript库的典范,以其简洁的API和强大的功能赢得了开发者们的广泛喜爱。在1.2.6版本中,jQuery的核心特性已经相当成熟,它提供了丰富的DOM操作、事件处理、动画效果以及Ajax...
3. **事件处理**:jQuery的事件处理非常灵活,如`click()`、`mouseover()`、`mouseout()`等,源码中会展示如何绑定和解绑事件,以及使用`event.preventDefault()`和`event.stopPropagation()`控制事件行为。...