|
分类 |
IE |
Mozzilla |
|
键盘相关属性 |
altKey |
|
|
metaKey、ctrlKey |
||
|
shiftKey |
||
|
keyCode、charCode、which、isChar |
||
|
鼠标相关属性 |
OffsetX和OffsetY |
layerX、 layerY |
|
ClientX和ClientY |
clientX、clientY |
|
|
screenX和screenY |
screenX、screenY |
|
|
x和Y |
pageX、pageY |
|
|
Button、wheelDelta |
Button、detail |
|
|
currentTarget、target |
||
|
fromElement、toElement |
relatedTarget |
|
|
一般属性 |
type |
type |
|
Cancelable、Bubbles |
表4.1 Event对象的相关属性
对于上表中的属性,它们有一些是能对应起来,有些却不能,就是能对应起来,也还是有一点差异,而Ext.EventObject就是兼容于各个浏览器,来处理这样差异,下面我们就结合这些属性和Ext.EventObject中相关方法与处理进行分析:
getCharCode : function(){return this.charCode || this.keyCode; },
getKey : function(){
var k = this.keyCode || this.charCode;
return Ext.isSafari ? (safariKeys[k] || k) : k;
},
if (!event.which&& ((event.charCode || event.charCode === 0)
? event.charCode: event.keyCode))
event.which = event.charCode || event.keyCode;
isSpecialKey : function(){
var k = this.keyCode;
return (this.type == 'keypress' && this.ctrlKey) || k == 9 || k == 13
|| k == 40 || k == 27 ||(k == 16) || (k == 17) ||(k >= 18 && k <= 20)
|| (k >= 33 && k <= 35) ||(k >= 36 && k <= 39) ||(k >= 44 && k <= 45);
},|
常量 |
其对应的值及说明 |
|
F1~F12 |
112~123(代表F1到F12按键) |
|
NUM_ZERO~NUM_NINE |
96~105(数字键盘上代表0到9的数字键) |
|
NUM_MULTIPLY、NUM_PLUS、 NUM_MINUS、NUM_PERIOD、 NUM_DIVISION、NUM_CENTER |
106~111 (分别代表乘(*)、加(+)、减(-)、小数点(.)和除(\)。 12 |
|
A~Z |
65~90(对应小写的a-z的字母) |
|
ZERO~ NINE |
48~57(对应0到9的数字) |
|
INSERT、DELETE、ESC、SPACE、BACKSPACE、TAB、ENTER(RETURN) |
45、46、27、32、8、9、13 |
|
SHIFT、CTRL(CONTROL)、ALT |
16、17、18 |
|
LEFT、UP、RIGHT、DOWN |
37、38、39、40 |
|
PAGEUP 、PAGEUP、END、HOME |
33、34、35、36 |
|
PAUSE、CAPS_LOCK、PRINT_SCREEN |
19、20、44 |
表4.2 event常用键常量
var btnMap = Ext.isIE ? {1:0,4:1,2:2} :


(Ext.isSafari ? ...{1:0,2:1,3:2} : {0:0,1:1,2:2});
this.button = e.button ? btnMap[e.button] : (e.which ? e.which-1 : -1);


if(e.type == 'click' && this.button == -1)...{ this.button = 0; }
getWheelDelta : function(){
var e = this.browserEvent;
var delta = 0;


if(e.wheelDelta)...{ delta = e.wheelDelta/120; /* IE/Opera. */ }
else if(e.detail)...{ delta = -e.detail/3; /* Mozilla case. */ }
return delta;
},|
属性名 |
说明 |
|
ClientX和ClientY |
光标相对于浏览器工作区域的水平和垂直位置(像素) |
|
screenX和screenY |
光标相对于屏幕的水平和垂直位置(像素) |
|
pageX和pageY (FF) |
光标相对于事件所在的文档的水平和垂直位置(像素) |
|
OffsetX和OffsetY |
光标相对于事件所在元素的最近已经定位的元素内边界位置。 |
|
x和Y (IE) |
光标相对于目标事件的父元素的外边界在x坐标上的位置。 |
|
layerX和layerY(FF) |
光标相对于事件所在元素的最近已经定位的元素外边界位置 |
表4.3 event的定位属性
对于ClientX和ClientY和screenX和screenY两对位属性没有什么好讲的。在Moziilla中pageX和pageY是相对页面初始位置定位,而它的layerX和layerY则是相对于鼠标点击的元素及其父辈元素中找到最近的进行了绝对定位的元素的外边界而定位。如果没有找到就相对于body来定位。而pageX是直接相对于body来定位。如果没有绝对定位时,那么它就和Page定位相同,(相差一个像素)。
getPageY: function(ev) {
ev = ev.browserEvent || ev;
var y = ev.pageY;

if (!y && 0 !== y) ...{
y = ev.clientY || 0;
if (Ext.isIE) ...{ y += this.getScroll()[0]; }
}
getScroll: function() {
var dd = document.documentElement, db = document.body;

if (dd && (dd.scrollTop || dd.scrollLeft)) ...{
return [dd.scrollTop, dd.scrollLeft]; }
else if (db) ...{ return [db.scrollTop, db.scrollLeft]; }
else ...{ return [0, 0]; }
},