Element.positionedOffset - Prototype JavaScript 框架

Xunxin Prototype API

positionedOffset
1.6

positionedOffset(element) -> [Number, Number] 或 { left: Number, top: Number }

element 的容器块(Containing Block)节点(译注:距离元素最近的 CSS position 属性为 relativeabsolute 的先代节点)为坐标原点,返回 element 的坐标偏移值(元素的容器块节点可通过 Element#getOffsetParent 方法获取)。
译注:假定返回值为 offset,则 X 轴坐标可通过 offset[0] 获取,也可以通过 offset.left 获取,Y 轴坐标可通过 offset[1] 获取,也可通过 offset.top 获取。

这个方法其实是累加元素及其所有父元素的 offsetLeftoffsetTop,直到其中一个元素的 CSS position 属性不等于 static译注:staticposition 的默认值)为止。

译注:上一段的描述和代码有些矛盾,原文是这样的:

Calculates the cumulative offsetLeft and offsetTop of an element and all its parents until it reaches an element with a position of static.

但是源代码却是:

positionedOffset: function(element) {
	var valueT = 0, valueL = 0;
	do {
		valueT += element.offsetTop  || 0;
		valueL += element.offsetLeft || 0;
		element = element.offsetParent;
		if (element) {
			if (element.tagName.toUpperCase() == 'BODY') break;
			var p = Element.getStyle(element, 'position');
			if (p !== 'static') break;	//注意这里,若 position 属性不等于 static,则跳出循环。
		}
	} while (element);
	return Element._returnOffset(valueL, valueT);
}

注意:所有返回值都仅有数字,单位为像素。