94 lines
3.1 KiB
JavaScript
94 lines
3.1 KiB
JavaScript
// xEvent, Copyright 2001-2005 Michael Foster (Cross-Browser.com)
|
|
// Part of X, a Cross-Browser Javascript Library, Distributed under the terms of the GNU LGPL
|
|
|
|
function xEvent(evt) // object prototype
|
|
{
|
|
var e = evt || window.event;
|
|
if(!e) return;
|
|
if(e.type) this.type = e.type;
|
|
if(e.target) this.target = e.target;
|
|
else if(e.srcElement) this.target = e.srcElement;
|
|
|
|
// Section B
|
|
if (e.relatedTarget) this.relatedTarget = e.relatedTarget;
|
|
else if (e.type == 'mouseover' && e.fromElement) this.relatedTarget = e.fromElement;
|
|
else if (e.type == 'mouseout') this.relatedTarget = e.toElement;
|
|
// End Section B
|
|
|
|
if(xOp6Dn) { this.pageX = e.clientX; this.pageY = e.clientY; }
|
|
else if(xDef(e.pageX,e.pageY)) { this.pageX = e.pageX; this.pageY = e.pageY; }
|
|
else if(xDef(e.clientX,e.clientY)) { this.pageX = e.clientX + xScrollLeft(); this.pageY = e.clientY + xScrollTop(); }
|
|
|
|
// Section A
|
|
if (xDef(e.offsetX,e.offsetY)) {
|
|
this.offsetX = e.offsetX;
|
|
this.offsetY = e.offsetY;
|
|
}
|
|
else if (xDef(e.layerX,e.layerY)) {
|
|
this.offsetX = e.layerX;
|
|
this.offsetY = e.layerY;
|
|
}
|
|
else {
|
|
this.offsetX = this.pageX - xPageX(this.target);
|
|
this.offsetY = this.pageY - xPageY(this.target);
|
|
}
|
|
// End Section A
|
|
|
|
if (e.keyCode) { this.keyCode = e.keyCode; } // for moz/fb, if keyCode==0 use which
|
|
else if (xDef(e.which) && e.type.indexOf('key')!=-1) { this.keyCode = e.which; }
|
|
|
|
this.shiftKey = e.shiftKey;
|
|
this.ctrlKey = e.ctrlKey;
|
|
this.altKey = e.altKey;
|
|
}
|
|
|
|
// I need someone with IE/Mac to compare test snippets 1 and 2 in section A.
|
|
|
|
// // Snippet 1
|
|
// if(xDef(e.offsetX,e.offsetY)) {
|
|
// this.offsetX = e.offsetX;
|
|
// this.offsetY = e.offsetY;
|
|
// if (xIE4Up && xMac) {
|
|
// this.offsetX += xScrollLeft();
|
|
// this.offsetY += xScrollTop();
|
|
// }
|
|
// }
|
|
// else if (xDef(e.layerX,e.layerY)) {
|
|
// this.offsetX = e.layerX;
|
|
// this.offsetY = e.layerY;
|
|
// }
|
|
// else {
|
|
// this.offsetX = this.pageX - xPageX(this.target);
|
|
// this.offsetY = this.pageY - xPageY(this.target);
|
|
// }
|
|
|
|
// // Snippet 2
|
|
// if (xDef(e.offsetX,e.offsetY) && !(xIE4Up && xMac)) {
|
|
// this.offsetX = e.offsetX;
|
|
// this.offsetY = e.offsetY;
|
|
// }
|
|
// else if (xDef(e.layerX,e.layerY)) {
|
|
// this.offsetX = e.layerX;
|
|
// this.offsetY = e.layerY;
|
|
// }
|
|
// else {
|
|
// this.offsetX = this.pageX - xPageX(this.target);
|
|
// this.offsetY = this.pageY - xPageY(this.target);
|
|
// }
|
|
|
|
// This was in section B:
|
|
|
|
// if (e.relatedTarget) this.relatedTarget = e.relatedTarget;
|
|
// else if (xIE4Up) {
|
|
// if (e.type == 'mouseover') this.relatedTarget = e.fromElement;
|
|
// else if (e.type == 'mouseout') this.relatedTarget = e.toElement;
|
|
// }
|
|
// changed to remove sniffer after discussion with Hallvord
|
|
|
|
// Possible optimization:
|
|
|
|
// if (e.keyCode) { this.keyCode = e.keyCode; } // for moz/fb, if keyCode==0 use which
|
|
// else if (xDef(e.which) && e.type.indexOf('key')!=-1) { this.keyCode = e.which; }
|
|
// // replace the above 2 lines with the following?
|
|
// // this.keyCode = e.keyCode || e.which || 0;
|