html event跨浏览器统一化...
时间:2010-08-14 来源:baoeni
在很多js框架关于event的扩展中都包括这个部分,也就是将event的属性统一化,具体如下:
//normalize target property
if (!e.target) {
e.target = e.srcElement || document;
}
//normalize if target is textnode
if (3 == e.target.nodeType) {
e.target = e.target.parentNode;
}
//normalize timeStamp
e.timestamp = e.timeStamp || Date.now();
//normalize preventDeafult
e.preventDefault = e.preventDefault || function() {
e.returnValue = false;
};
//normalize pageX,pageY
if (undefined === e.pageX && undefined !== e.clientX) {
var doc = document.documentElement, body = document.body;
e.pageX = e.clientX + (doc.scrollLeft || body.scrollLeft || 0) - (doc.clientLeft || 0);
e.pageY = e.clientY + (doc.scrollTop || body.scrollTop || 0) - (doc.clientTop || 0);
}
//normalize button press
if (!e.which) {
e.which = e.charCode || e.keyCode;
}
// 鼠标单击:1 == 左键; 2 == 中键; 3 == 右键
if (!e.which && e.button) {
e.which = (e.button & 1 ? 1 : (e.button & 2 ? 3 : (e.button & 4 ? 2 : 0)));
}
// add relatedTarget, if necessary
if (!e.relatedTarget && e.fromElement) {
e.relatedTarget = (e.fromElement === e.target) ? e.toElement : e.fromElement;
}
// add metaKey to non-Mac browsers (use ctrl for PC's and Meta for Macs)
if (e.metaKey === undefined) {
e.metaKey = e.ctrlKey;
}