1 // 针对火狐不支持offsetX/Y
2 function getOffset(e){
3 var target = e.target, // 当前触发的目标对象
4 eventCoord,
5 pageCoord,
6 offsetCoord;
7
8 // 计算当前触发元素到文档的距离
9 pageCoord = getPageCoord(target);
10
11 // 计算光标到文档的距离
12 eventCoord = {
13 X : window.pageXOffset + e.clientX,
14 Y : window.pageYOffset + e.clientY
15 };
16
17 // 相减获取光标到第一个定位的父元素的坐标
18 offsetCoord = {
19 X : eventCoord.X - pageCoord.X,
20 Y : eventCoord.Y - pageCoord.Y
21 };
22 return offsetCoord;
23 }
24
25 function getPageCoord(element){
26 var coord = { X : 0, Y : 0 };
27 // 计算从当前触发元素到根节点为止,
28 // 各级 offsetParent 元素的 offsetLeft 或 offsetTop 值之和
29 while (element){
30 coord.X += element.offsetLeft;
31 coord.Y += element.offsetTop;
32 element = element.offsetParent;
33 }
34 return coord;
35 }