获取盒子的实际位置

1 篇文章 0 订阅

在元素的定位中经常出错,学习了一段时间,今天来总结一下其中遇到的一些问题

其中obj.offsetLeft指的是一个元素的计算后的位置==盒模型的尺寸:

1.offsetWidth=css宽+padding+border

2.offsetLeft/offsetTop 到定位父级的距离

3.document.documentElement.clientWidth/clientHeight  窗口的可视化宽高

4.document.documentElement.scrollTop(ie ff)  或 document.body.scrollTop(chrome)窗口的滚动距离

5.window.onresize  窗口大小改变

6.window.onscroll   窗口滚动事件

<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title></title>
<style>
*{ margin:0; padding:0; list-style:none;}
body{ padding:10px;}
#div1{ background:red; padding:110px;position:relative;}
#div2{ background:green; padding:70px;padding-top:10px;position:relative;}
#div3{ background:blue; padding:20px;}
</style>
<script>
window.οnlοad=function(){
	var oDiv3=document.getElementById('div3');
	//oDiv3.offsetLeft+oDiv2.offsetLeft+oDiv1.offsetLeft
	//变量累加
	//找定位父级,把他变成自己
	alert(getPos(oDiv3).left);
	alert(getPos(oDiv3).top);
	alert(oDiv3.offsetLeft)
	function getPos(obj){
		var l=t=0;
		while(obj){
		//for(;obj;){
			//找	累加	l
			l+=obj.offsetLeft;	//取到定位父级的距离
			t+=obj.offsetTop;	//取到定位父级的距离
			obj=obj.offsetParent;	//把obj的定位父级变成obj
		}
		return {left:l,top:t};
	}
};
</script>
</head>
<body id="bd">
<div id="div1">
	<div id="div2">
    	<div id="div3"></div>
    </div>
</div>
</body>
</html>
其中div3的padding是20px,div2的padding是70px,div1的padding是110px,body的padding是10px;如果要算出div3相对于窗口左边的距离是多少,用现有的方法是div3.offsetLeft+div2.offsetLeft+div1.offsetLeft其值应该是70px+110px+10px=190px;然而可以用函数直接求出来。思路是求出div3到定位父级的距离,然后取定位父级到其定位父级的距离,以此轮推累加下去取到的就是其到浏览器窗口的距离:

首先要先定义l=t=0;然后可以取其到定位父级的距离,然后赋值给自己,然后再取其本身到定位父级的距离l+=obj.offsetLeft或t+=obj.offsetTop,再把定位父级赋值给自己obj=obj.offsetParent,一直到最后,然后返回l和t就是div到浏览器窗口的距离。

1.如果要获取浏览器滚动条滚动的距离document.documentElement.scrollTop(ie ff) 这个是对IE和ff浏览器的,document.body.scrollTop(chrome)这个是对于chrome浏览器的。

2.如果获取浏览器当前窗口的大小就要使用document.documentElement.clientWidth/clientHeight 窗口可视化宽高

3.window.onresize 浏览器窗口大小改变时触发的事件

4.window.onscroll浏览器滚动条滚动时触发的事件









  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值