js获取元素到文档区域document的坐标方法

   获取页面中元素到文档区域document的横向、纵向坐标的两种方法及其比较

  在js控制元素运动的过程中,对于页面元素坐标位置的获取是经常用到的,这里主要总结下两种方法:

  一:通过叠加元素对象和它的offsetParent(如果存在)的offsetLeft/offsetTop属性来实现

  在阅读javascript高级程序设计第三版DOM部分时,了解到要获取某个元素在页面上的偏移量,需要将这个元素的offsetLeft和offsetTop与其offsetParent的相同属性相加,一直循环直至根元素。所以,要得到元素到文档区域的坐标位置,只需通过while循环不断获取offsetParent的offsetLeft/offsetTop直到offsetParent = null为止。

  js代码:

  代码如下:

  // 获取元素到文档区域的坐标

  function getPosition(element) {

  var actualLeft = element.offsetLeft,

  actualTop = element.offsetTop,

  current = element.offsetParent; // 取得元素的offsetParent

  // 一直循环直到根元素

  while (current !== null) {

  actualLeft += current.offsetLeft;

  actualTop += current.offsetTop;

  current = current.offsetParent;

  }

  // 返回包含left、top坐标的对象

  return {

  left: actualLeft,

  top: actualTop

  };

  }

  例子截图:


  firebug下测试结果截图:(注:其他浏览器已通过测试!)


  二:通过 getBoundingClientRect() 方法实现

  getBoundingClientRect方法用于获得页面中某个元素的左,上,右和下分别相对浏览器视窗window的位置。返回的是一个对象,该对象有四个属性:top,left,right,bottom;该方法原本是IE Only的,但是FF3.0+和Opera9.5+已经支持了该方法,可以说在获得页面元素位置上效率有很大的提高。 另外,该方法避免使用while循环,而是直接获取数值来实现,比第一种方法性能要好,特别是在复杂的页面上更为明显。

  js代码:

  代码如下:

  // 获取元素到文档区域的坐标

  function getPosition(element){

  var dc = document,

  rec = element.getBoundingClientRect(),

  _x = rec.left, // 获取元素相对浏览器视窗window的左、上坐标

  _y = rec.top;

  // 与html或body元素的滚动距离相加就是元素相对于文档区域document的坐标位置

  _x += dc.documentElement.scrollLeft || dc.body.scrollLeft;

  _y += dc.documentElement.scrollTop || dc.body.scrollTop;

  return {

  left: _x,

  top: _y

  };

  }

  经测试,该方法与第一种方法获取元素相对于document的坐标大小相同,对于IE低版本浏览器,存在一些差异。

  注意:记得要累加上html(IE除外)或body(针对IE)元素的水平或垂直滚动距离!

  结语:上文已对如何获取元素相对于文档区域document的坐标位置做出了阐述,如遇到相关问题,可联系本人或直接发表评论,另外,对于右坐标right以及下坐标bottom的获取只需把left、top坐标的大小和元素本身的宽度(elem.offsetWidth)以及高度(elem.offsetHeight)相加即可,当然offsetWidth、offsetHeight属性会计算元素的内边距、边框,所以最好的办法还是通过getBoundingClientRect方法来获取。ps:补充一点,利用该方法返回对象的right-left = 元素宽度;bottom-top = 元素高度。可以获取不带边框的元素本身的宽度和高度。

时间: 2025-01-21 01:19:06

js获取元素到文档区域document的坐标方法的相关文章

js获取元素到文档区域document的(横向、纵向)坐标的两种方法_javascript技巧

获取页面中元素到文档区域document的横向.纵向坐标的两种方法及其比较 在js控制元素运动的过程中,对于页面元素坐标位置的获取是经常用到的,这里主要总结下两种方法: 一:通过叠加元素对象和它的offsetParent(如果存在)的offsetLeft/offsetTop属性来实现 在阅读javascript高级程序设计第三版DOM部分时,了解到要获取某个元素在页面上的偏移量,需要将这个元素的offsetLeft和offsetTop与其offsetParent的相同属性相加,一直循环直至根元素

javascript获取元素离文档各边距离的方法_javascript技巧

本文实例讲述了javascript获取元素离文档各边距离的方法.分享给大家供大家参考.具体实现方法如下: 复制代码 代码如下: function getDistance(obj) {   if (!obj instanceof jQuery) {       obj = $(obj);   }   var distance = {};   distance.top = (obj.offset().top - $(document).scrollTop());   distance.bottom

js获取元素的外链样式的简单实现方法_javascript技巧

一般给元素设置行内样式,如<div id="div1" style="width:500px;"></div>.如要获取它的样式,即可document.getElementById("div1").style.width来获取或设置.但是如果样式是在外链link中的或者是页面的非行内样式,就获取不到了. 在标准浏览器中可以通过window.getComputedStyll(obj,null)[property]来获取外链样

JS获取整个页面文档的实现代码_javascript技巧

唯一需要注意的地方: innerText与textContent,显示页面的时候不能用innerHTML,否则会被解析.innerText与textContent是在除FF之外的浏览器与FF之间的差异. 复制代码 代码如下: var innerText = document.body.innerText ? 'innerText' : 'textContent'; 上面的语句在开头处理以避免多次判断 demo贴图: demo: 复制代码 代码如下: <!DOCTYPE html PUBLIC &qu

js 获取元素下面所有li的两种方法_javascript技巧

js 获取元素下面所有的li 复制代码 代码如下: var content=document.getElementById("content"); var items=content.getElementsByTagName("ul"); var itemss=items[2].getElementsByTagName("li"); 或 复制代码 代码如下: var div=document.getElementById('a'); var ul

js获取元素相对窗口位置的实现代码_javascript技巧

JS获取元素的offsetTop,offsetLeft等属性 obj.clientWidth //获取元素的宽度 obj.clientHeight //元素的高度 obj.offsetLeft //元素相对于父元素的left obj.offsetTop //元素相对于父元素的top obj.offsetWidth //元素的宽度 obj.offsetHeight //元素的高度 区别: clientWidth = width + padding clientHeight = height + p

js XMLDOM解析xml 文档实例解析

js XMLDOM解析xml 文档实例解析 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta htt

js获取元素外链样式的方法_javascript技巧

本文实例讲述了js获取元素外链样式的方法.分享给大家供大家参考.具体分析如下: 一般给元素设置行内样式,如<div id="div1" style="width:500px;"></div>.如要获取它的样式,即可document.getElementById("div1").style.width来获取或设置.但是如果样式是在外链link中的或者是页面的非行内样式,就获取不到了. 在标准浏览器中可以通过window.ge

js 获取元素在页面上的偏移量的方法汇总_javascript技巧

使用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.offsetP