问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

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

发布网友 发布时间:2023-05-03 09:04

我来回答

1个回答

热心网友 时间:2023-10-19 04:00

  获取页面中元素到文档区域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的 但是FF +和Opera +已经支持了该方法 可以说在获得页面元素位置上效率有很大的提高 另外 该方法避免使用while循环 而是直接获取数值来实现 比第一种方法性能要好 特别是在复杂的页面上更为明显

  js代码

  代码如下:

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

  function getPosition(element){

  var dc = document

  rec = element getBoundingClientRect()

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

  _y = rec top;

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

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

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

  return {

  left: _x

  top: _y

  };

  }

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

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

lishixin/Article/program/Java/JSP/201311/20207
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
光线为什么不存在 炒菜时要等到油冒烟吗 高考数学选修没涂有分吗? 高考选修不涂有分数吗 《宫》中插曲是什么乐器演奏的? 电视剧《宫》的主题曲和片尾曲分别是什么? 爱我的人和我爱的人原唱是裘海正还是游鸿明 刑法对追诉时效的规定 刑事案件追诉期限的法律规定是什么? 爱奇艺海外版怎么下载 抖音小店商标logo怎么设计 Word软件主要运用在哪些方面(word主要用于哪些方面) 黑怎么读 黑的拼音是什么 梦见抓到双头蛇的预兆 小学四年级我学会了游泳作文400字【六篇】 我学会了游泳作文600字四年级 我学会了游泳的作文500字四年级 我学会了游泳500字优秀作文四年级 四年级我学会了游泳作文400字【六篇】 小学生四年级我学会了游泳作文500字 我学会了游泳四年级400字作文 在线看电影收费问题 总是申诉失败怎么办? 新开张的店铺一般多少时间可以在淘宝首页搜索出来,? 微粒贷额度怎么提高? 什么是机械刹车? 装载机刹车片是什么材料制成的 ??? 刹车片主要原材料是什么? 以勤劳为意思的公司名字 勤劳的名字有哪些? 女人梦见红色的西瓜瓤 梦见吃红瓤西瓜的预兆 圣杯六正位他会出轨吗 圣杯六正位正缘在哪 圣杯六正位 逆位圣杯六,圣杯骑士正位,倒吊人逆位!代表对方已经放弃这段感情了吗? 宝剑八和圣杯八倒位,圣杯六正位,代表感情还能复合吗 圣杯6正位,权杖国王正位,星币6逆位,问题什么时候赚很多的钱 以“六艺”修身,立志做谦谦有礼的少年君子 社保当中有高保。低保区别待遇有什么不同? 五险中的高保与低保区别在哪里? 公司里交的社会保障(高保)到底什么怎么样的? 现在社保中低保和高保有什么区别???(主要是养老医疗方面的区别) 。 毫不松弛的意思? 放松的造句放松的造句是什么 怎么用Excel算出年龄? 韭菜可以生吃吗?谢谢了,大神帮忙啊 芹菜好吃还是韭菜好吃? 芹菜和韭菜谁的营养高。早餐吃那个好?还是茄子 支付宝车生活加油优惠剩钱能提现吗