js 获取元素在页面上的偏移量的方法汇总
2015-04-13 09:01
771 查看
使用js制作效果时,我们常常要获取某个元素在页面上的偏移量(例如tip提示框功能)。而获取偏移量可以直接获取相对于document的偏移量,也可以获取相对与视口的偏移量(viewpoint)加上页面滚动量(scroll)获得。
1.获取相对与document的偏移量
function getOffsetSum(ele){ var top= 0,left=0; while(ele){ top+=ele.offsetTop; left+=ele.offsetLeft; ele=ele.offsetParent; } return { top:top, left:left } }
通过向上迭代offsetParent,可以计算出相对于document的偏移量,也就是相对与页面的偏移量。
此方法的问题:
1)对于使用表格和内嵌框架布局的页面,由于不同浏览器实现元素方式的差异,得到的结果就不精确了。
2)每次都需要一级一级向上查找offsetParent,效率太低。
2.获取相对与视口的偏移量(viewpoint)加上页面的滚动量(scroll)
function getOffsetRect(ele){ var box=ele.getBoundingClientRect(); var body=document.body, docElem=document.documentElement; //获取页面的scrollTop,scrollLeft(兼容性写法) var scrollTop=window.pageYOffset||docElem.scrollTop||body.scrollTop, scrollLeft=window.pageXOffset||docElem.scrollLeft||body.scrollLeft; var clientTop=docElem.clientTop||body.clientTop, clientLeft=docElem.clientLeft||body.clientLeft; var top=box.top+scrollTop-clientTop, left=box.left+scrollLeft-clientLeft; return { //Math.round 兼容火狐浏览器bug top:Math.round(top), left:Math.round(left) } }
此方法直接通过getBoundingClientRect()方法获得相对于视口的偏移量,加上页面的滚动量,减去clientTop,clientLeft (IE8及更低版本浏览器将(2,2)作为起点坐标,所以要将值减去起点坐标,其他浏览器都是已(0,0)作为起点坐标)。
getBoundingClientRect()方法支持IE,ff3+,safari4+,Orear9,5,Chrome.
3.兼容性写法
//获取元素相对于页面的偏移 function getOffset(ele){ if(ele.getBoundingClientRect){ return getOffsetRect(ele); }else{ return getOffsetSum(ele); } }
对于支持getBoundingClientRect()方法的浏览器使用getOffsetRect()方法,不支持的则使用getOffsetSum()方法。
以上所述就是本文的全部内容了,希望能够对大家学习javascript有是帮助。
您可能感兴趣的文章:
相关文章推荐
- Js与Jq 获取页面元素值的方法和差异对比
- js 实现获取name 相同的页面元素并循环遍历的方法
- js 获取元素在页面上的偏移量的最佳方式
- 获取页面中被选中元素的 JS原生方法 与 jQuery方法 分析
- JS与JQ中iframe获取子父级页面元素的方法
- 获取页面中被选中元素的 JS原生方法 与 jQuery方法 分析
- 原生js获取iframe中dom元素--父子页面相互获取对方dom元素的方法
- Js与Jq 获取页面元素值的方法和差异对比
- 个人笔记 js 06 子页面获取父页面的元素的方法
- 实用js小汇总--获取iframe引用的页面中的控件ID,或赋值的实现方法
- js获取元素的偏移量offset简单方法(必看)
- 学习笔记之php页面中js获取标签元素的ID值方法
- js中获取页面元素方法总结
- 原生JS 获取浏览器、窗口、元素等尺寸的方法及注意事项
- 使用jQuery的data方法来为页面中的某个元素存储数据,(获取焦点,清除默认值)
- jquery 父、子页面之间页面元素的获取,方法的调用
- Js/Jquery:获取iframe中的元素+在Iframe中获取父窗体的元素方法
- js获取隐藏元素宽高的实现方法
- js跳转页面方法汇总。
- js与jquery获取父级元素,子级元素,兄弟元素的实现方法