存档

文章标签 ‘位置’

获取页面元素位置

2009年2月11日

在Web编程中,常常会使用某个元素的位置,即相对于整个屏幕左上方的位置。

这里有一个较好的方法实现。

function getElementPos(elementId){
var ua = navigator.userAgent.toLowerCase();
var isOpera = (ua.indexOf('opera') != -1);
var isIE = (ua.indexOf('msie') != -1 && !isOpera); // not opera spoof
var el = document.getElementById(elementId);
if(el.parentNode === null || el.style.display == 'none'){
return false;
}
var parent = null;
var pos = [];
var box;
if(el.getBoundingClientRect) //IE
{
box = el.getBoundingClientRect();
var scrollTop = Math.max(document.documentElement.scrollTop, document.body.scrollTop);
var scrollLeft = Math.max(document.documentElement.scrollLeft, document.body.scrollLeft);
//alert(box.left+scrollLeft);
return {x:box.left + scrollLeft, y:box.top + scrollTop};
}
else if(document.getBoxObjectFor) // gecko
{
box = document.getBoxObjectFor(el);
var borderLeft = (el.style.borderLeftWidth)?parseInt(el.style.borderLeftWidth):0;
var borderTop = (el.style.borderTopWidth)?parseInt(el.style.borderTopWidth):0;
pos = [box.x - borderLeft, box.y - borderTop];
}
else // safari & opera
{
pos = [el.offsetLeft, el.offsetTop];
parent = el.offsetParent;
if (parent != el) {
while (parent) {
pos[0] += parent.offsetLeft;
pos[1] += parent.offsetTop;
parent = parent.offsetParent;
}
}

if (ua.indexOf('opera') != -1|| ( ua.indexOf('safari') != -1 && el.style.position == 'absolute' )){
pos[0] -= document.body.offsetLeft;
pos[1] -= document.body.offsetTop;
}

}
if (el.parentNode) { parent = el.parentNode; }
else { parent = null; }

while (parent && parent.tagName != 'BODY' && parent.tagName != 'HTML'){ // account for any scrolled ancestors
pos[0] -= parent.scrollLeft;
pos[1] -= parent.scrollTop;
if (parent.parentNode) { parent = parent.parentNode; }
else { parent = null; }
}
return {x:pos[0], y:pos[1]};
}

DIV/CSS, HTML, Javascript , , , ,

用一个JS代码实现页面刷新后保持页面滚动条的位置

2008年5月23日
<SCRIPT LANGUAGE="JavaScript">
<!--
function Trim(strValue){
	return strValue.replace(/^\s*|\s*$/g,"");
}
function SetCookie(sName, sValue){
	document.cookie = sName + "=" + escape(sValue);
}   

function GetCookie(sName){
	var aCookie = document.cookie.split(";");
	for (var i=0; i < aCookie.length; i++){
		var aCrumb = aCookie[i].split("=");
		if (sName == Trim(aCrumb[0])){
			return unescape(aCrumb[1]);
		}
	}
	return null;
}
function scrollback(){
	if (GetCookie("scroll")!=null){document.body.scrollTop=GetCookie("scroll")}
}
//-->
</script>
然后修改BODY位置为
<BODY id=body onscroll=SetCookie("scroll",body.scrollTop); onload="scrollback();">

HTML, Javascript , , , ,

JavaScript 获取当前页面的滚动条纵坐标位置

2008年5月23日

要获取当前页面的滚动条纵坐标位置,用:

document.documentElement.scrollTop;

而不是:

document.body.scrollTop;

documentElement 对应的是 html 标签,而 body 对应的是 body 标签。

documentElement 不常用。这容易在开发中犯错,网上很多例子,用的是 document.body.scrollTop ,实际上是取不到正确值的。

HTML, Javascript , , , ,