获取盒子的实际位置
2016-04-25 23:33
369 查看
在元素的定位中经常出错,学习了一段时间,今天来总结一下其中遇到的一些问题
其中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.onload=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浏览器滚动条滚动时触发的事件
其中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.onload=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浏览器滚动条滚动时触发的事件
相关文章推荐
- Web布局连载——两栏固定布局(五)
- [div+css]晒晒最新制作专题推广页模板
- 盒子模型
- CSS选择器
- CSS样式优先权
- [css] line-height 百分比单位和数值单位的区别
- Apple官网研究之使用Justify布局导航
- 关于前端的思考与感悟
- 设计更快的网页(三):字体和 CSS 调整
- 纯CSS制作的新闻网站中的文章列表
- 10条影响CSS渲染速度的写法与使用建议第1/3页
- BS项目中的CSS架构_仅加载自己需要的CSS
- 很不错的 CSS Hack 又学了一招
- 发一个css比较清爽的写法
- CSS expression控制图片自动缩放效果代码[兼容 IE,Firefox]
- css布局网页水平居中常用方法
- CSS经典技巧十则第1/2页
- css 兼容性问题this.style.cursor=''hand''
- IE6不能正常解析CSS文件问题的解决方法及原因分析