js获取元素相对窗口位置的实现代码
来源: 阅读:724 次 日期:2016-06-15 09:44:46
温馨提示: 小编为您整理了“js获取元素相对窗口位置的实现代码”,方便广大网友查阅!

js获取元素的offsettop,offsetleft等属性

obj.clientwidth //获取元素的宽度

obj.clientheight //元素的高度

obj.offsetleft //元素相对于父元素的left

obj.offsettop //元素相对于父元素的top

obj.offsetwidth //元素的宽度

obj.offsetheight //元素的高度

区别:

clientwidth = width + padding

clientheight = height + padding

offsetwidth = width + padding + border

offsetheight = width + padding + border

offset比client多了border的宽度

?123456789101112 //获取元素的纵坐标(相对于窗口) function gettop(e){ var offset=e.offsettop; if(e.offsetparent!=null) offset+=gettop(e.offsetparent); return offset; } //获取元素的横坐标(相对于窗口) function getleft(e){ var offset=e.offsetleft; if(e.offsetparent!=null) offset+=getleft(e.offsetparent); return offset; }

之前也写过一篇js关于获取元素位置的文章:js获取元素的offsettop,offsetleft等属性,我们可以通过offsettop和offsetleft属性获取元素相对窗口的位置,但offsettop和offsetleft属性都是相对于父元素定位的,而通常需要获取位置的元素都不是在最外层,所以遍历上级元素的offset相关属性少不了。那效率就成问题了。

?123456789101112 //获取元素的纵坐标(相对于窗口) function gettop(e){ var offset=e.offsettop; if(e.offsetparent!=null) offset+=gettop(e.offsetparent); return offset; } //获取元素的横坐标(相对于窗口) function getleft(e){ var offset=e.offsetleft; if(e.offsetparent!=null) offset+=getleft(e.offsetparent); return offset; }

好在浏览器给我提供了相应的接口getboundingclientrect,这个方法最早出现在ie浏览器中,后来的浏览器也跟着支持了这个方法,而且还更加完善,ie中只能获取到元素的left,top,bottom,right的属性,而后面的现代浏览器还能获取到元素的width和

chrome firefox (gecko) internet explorer opera safari

1.0 3.0 (1.9) 4.0 (yes) 4.0

这里要注意的是,bottom是元素底部相对于窗口顶部的距离,而不是像css里面position的bottom相对于窗口底部,同理,rihgt属性是元素最右边相对于窗口左边的距离。

?12345678 var box = document.getelementbyid(box); var pos = box.getboundingclientrect(); box.innerhtml = top:+pos.top + left:+pos.left + bottom:+pos.bottom + right:+pos.right + width:+pos.width + height:+pos.height

更多信息请查看脚本栏目
由于各方面情况的不断调整与变化, 提供的所有考试信息和咨询回复仅供参考,敬请考生以权威部门公布的正式信息和咨询为准!
关于我们 | 联系我们 | 人才招聘 | 网站声明 | 网站帮助 | 非正式的简要咨询 | 简要咨询须知 | 加入群交流 | 手机站点 | 投诉建议
工业和信息化部备案号:滇ICP备2023014141号-1 云南省教育厅备案号:云教ICP备0901021 滇公网安备53010202001879号 人力资源服务许可证:(云)人服证字(2023)第0102001523号
云南网警备案专用图标
联系电话:0871-65317125(9:00—18:00) 获取招聘考试信息及咨询关注公众号:hfpxwx
咨询QQ:526150442(9:00—18:00)版权所有:
云南网警报警专用图标
Baidu
map