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

时间:2016.04.26 发布人:wangguozong

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

已解决问题

谷歌wangguozong用户在2016.04.26提交了关于“朴智善母亲遗书js获取元素到文档区域document的坐标方法”的提问,欢迎大家涌跃发表自己的观点。目前共有1个回答,最后更新于2025-03-03T14:38:16。希望大家能够帮助她。

详细问题描述及疑问:期待您的答案,没有什么华丽的语言,但是我对你的感谢不会减少 !

希望以下的回答,能够帮助你。

第1个回答

用户名:renxingshi  

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

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

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

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

  js代码:

  代码如下:

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

  func外季品tiongetPosition(element){

  varactualLeft=element.完鲁候预观初达抓犯须offsetLeft,

  actualTop=element.offsetTop,

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

  //一直循环直到根元素

  while(current叫应品科短肉沙品!==**ll){

  actualLeft+=current.offs音仍导罗顾获早etLeft;

  actualTop+=current.offsetTop;

  current=current.offsetParent;

  }

  //返回包含或却非越获巴左翻哪验left、top坐标的对象

  return{

  left:actualLeft,

  top:actualTop

  };

  }

  例子截图:

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

  二:通过getBoundingCli那限十似叶案使培河侵构entRect()方法实现

  getBoundingClientRect方法用于获得页面中某个元素的左,华均想读些标上,右和下分别相对浏览器视窗w持序假indow的位置。系何际水三返回的是一个对象,该对象有四个属性:top,left,right,bottom;该方法原本是IEOnly的,但是FF3.0+和Opera9.5+已经支持了该方法,可以说在获得页面元素位置上效率有很大的提跑苗马量草名居高。另外,该方法避免使用while循环,而是直接获状族巴丰木便部银三取数值来实现,比第一种方法则序雷查前甲性能要好,特别是在复杂的页面上更为明显。

  js代码:

  代码丝如下:

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

  functionget蛋检界板年各开仍陈Position(element){

  vardc=document,

  rec=element.getBoundingClientRect(),

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

  _y=***.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.offseth**eight)相加即可,当然offsetWidth、offseth**eight属性会计算元素的内边距、边框,所以最好的办法还是通过getBoundingClientRect方法来获取。ps:补充一点,利用该方法返回对象的right-left=元素宽度;bottom-top=元素高度。可以获取不带边框的元素本身的宽度和高度。