jQuery事件处理(三)
继续了解jQuery对浏览器兼容的处理
1、keyHooks对键盘按键的封装
keyHooks: {
// 一些键盘相关的属性
props: "char charCode key keyCode".split(" "),
// 新的event对象和原生的event对象作为参数传入filter
filter: function( event, original ) {
// 如果event中没有which属性,新声明一个which属性并赋值
if ( event.which == null ) {
// 原生event中如果有charCode,就将它的charCode赋值给event的which属性,否则将它的keyCode赋值给which属性
event.which = original.charCode != null ? original.charCode : original.keyCode;
}
// 返回新的event
return event;
}
},
mouseHooks: {
// 一些鼠标相关的属性
props: "button buttons clientX clientY offsetX offsetY pageX pageY screenX screenY toElement".split(" ")
// 传入新event和原生event
filter: function( event, original ) {
var eventDoc, doc, body,
button = original.button;
// 统一pageX/Y,如果没有就通过计算得到一个
if ( event.pageX == null && original.clientX != null ) {
// 拿到目标元素的根元素,默认是document
eventDoc = event.target.ownerDocument || document;
doc = eventDoc.documentElement;
body = eventDoc.body;
event.pageX = original.clientX + ( doc && doc.scrollLeft || body && body.scrollLeft || 0 ) - ( doc && doc.clientLeft || body && body.clientLeft || 0 );
event.pageY = original.clientY + ( doc && doc.scrollTop || body && body.scrollTop || 0 ) - ( doc && doc.clientTop || body && body.clientTop || 0 );
}
// 如果event中没有which,并且原生event中有button属性
if ( !event.which && button !== undefined ) {
// 将button属性迁移到新event的which属性中
event.which = ( button & 1 ? 1 : ( button & 2 ? 3 : ( button & 4 ? 2 : 0 ) ) );
}
return event;
}
}
上面的两个对象,会在jQuery内部调用event的fix方法时用到,进行event的修正。
接下来需要继续分析注册事件时到底往cache中存入了什么,以及为什么存这些数据。
jQuery事件处理(三)的更多相关文章
- jQuery事件处理了解一下
>>> JQuery 事件处理 一.事件绑定方式 1.事件绑定的快捷方式: 缺点:绑定的事件,无法取消 $("button:eq(0)").dblclick(fu ...
- [DOM Event Learning] Section 3 jQuery事件处理基础 on(), off()和one()方法使用
[DOM Event Learning] Section 3 jQuery事件处理基础 on(),off()和one()方法使用 jQuery提供了简单的方法来向选择器(对应页面上的元素)绑定事件 ...
- jQuery事件处理(四)
看了几天,决定整理一下jQuery事件处理的整体设计思路 1.通过add方法给选中的元素注册事件处理程序(通过缓存系统将事件储存到cache,而不是绑定到元素上) a.在存储之前,会为事件处理程序增加 ...
- Unit02: jQuery事件处理 、 jQuery动画
Unit02: jQuery事件处理 . jQuery动画 jQuery实现购物车案例 <!DOCTYPE html> <html> <head> <titl ...
- jQuery的三种写法
jQuery的三种写法 jQuery一共有三种写法,写法如下: <script type="text/javascript" src="js/jquery-1.9. ...
- JQuery(三) Ajax相关
JQuery大大简化了Ajax通用操作,开发者只需要指定请求URL,回调函数即可. 三个主要方法: $().param(obj):将obj参数(对象或数组)转化成查询字符串. {name:" ...
- Web前端基础——jQuery(三)
本文主要从以下几方面介绍jQuery应用中的内容: 1 jQuery 节点遍历2 jQuery 中的过滤器3 jQuery 属性操作4 jQuery Dom节点操作5 几个jQuery例子6 jQue ...
- 02-老马jQuery教程-jQuery事件处理
1. 绑定简单事件 在DOM中DOM0级绑定事件的方式是直接给事件属性赋值,但是这样有个缺点就是每次指定的事件处理程序会把之前的覆盖掉. jQuery简单绑定事件的方式,可以让我绑定多个事件处理程序跟 ...
- jQuery事件处理(六)
1.通过一步步调试的的方法观察了一下存放到cache中的事件及其处理程序的数据格式: { events : { // 根据事件类型存放添加到该元素上的所有事件,下面以click为例 click : [ ...
随机推荐
- Win10无法使用内置管理员用户打开edge解决方案
https://jingyan.baidu.com/article/4f7d5712d23f1b1a2119274b.html
- C# 使用 Task 替换 ThreadPool ,异步监测所有线程(任务)是否全部执行完毕
using Microsoft.VisualStudio.TestTools.UnitTesting; using System.Collections.Generic; using System.T ...
- 设置时间同步(Linux,Solaris)
经过网上各种搜索,将LINUX平台及solaris平台的时间同步整理如下: 主机情况:应用:2台LINUX服务器 redhat 5.5 内网数据库:2台Solaris服务器 Solaris 10 内网 ...
- 限定某个目录禁止解析php 限制user_agent php相关配置
- VOIP NAT穿越之SIP信令穿越
本文原创自 http://blog.csdn.net/voipmaker 转载注明出处. 本文是VOIP通信NAT系列专题的第三篇, 本文论述NAT对SIP协议穿越的影响.SIP协议是基于文本的,而 ...
- 将Unity导出的Eclipse工程转换为AndroidStudio工程
步骤:1)将unity项目导出到文件夹: 转换到安卓平台,这里只勾选google android project.然后导出到自己新建的文件夹. 2)打开导出的文件夹,看到如下内容.这是unity5.x ...
- html实体转换
摘要: 在 HTML 中,某些字符是预留的.在 HTML 中不能使用小于号(<)和大于号(>),这是因为浏览器会误认为它们是标签.如果希望正确地显示预留字符,我们必须在 HTML 源代码中 ...
- ASCII码与16进制的互相转换(表)
所谓的ASCII和16进制都只是概念上的东西,在计算机中通通是二进制 转换应该是输出的转换,同样是一个数,在计算机内存中表示是一样的,只是输出不一样ASCII是针对字符的编码,几乎是键盘上的字符的编码 ...
- python的输出问题
我们知道python提供了一个shell来供初学者学习,在shell里是输入一句执行一句,例如:
- CreateProcess函数详解
在windows程序设计五中有详解 CreateProcess 说明: WIN32API函数CreateProcess用来创建一个新的进程和它的主线程,这个新进程运行指定的可执行文件. 函数原型: B ...