javascript - IE中元素问题的位置?

标签 javascript html internet-explorer position

我正在使用以下 JavaScript 函数来获取元素的绝对位置

function findPos(obj) {
  var curleft = 0;
  if (obj.offsetParent) {
      while (1) {
          curleft += obj.offsetLeft;
          if (!obj.offsetParent) {
              break;
          }
          obj = obj.offsetParent;
      }
  }
}

该函数在除 IE 之外的所有浏览器中都可以正常工作。在 IE 中,它在全屏下也可以正常工作,但是当调整浏览器大小时,此方法会返回不正确的偏移量。

你能帮我解决这个问题吗

最佳答案

我建议您不要使用offsetParent/Top/Left利用getBoundingClientRect()功能(略有增强)。它应该具有更高的性能,因为您不必循环遍历 DOM,并且它应该跨浏览器返回正确的结果。

您的 findPos 函数将如下所示:

function findPos(obj) {
    var gbcr = obj.getBoundingClientRect(),
        dE = document.documentElement,
        b = document.body,
        scrollY = window.pageYOffset || dE.scrollTop || b.scrollTop, /* 1 */
        scrollX = window.pageXOffset || dE.scrollLeft || b.scrollLeft, /* 1 */
        top = gbcr.top + scrollY - dE.clientTop, /* 2 */
        left = gbcr.left + scrollX - dE.clientLeft; /* 2 */

    return { top: top, left: left };
}
  1. getBoundingClientRect()不考虑滚动,所以你必须对此进行补偿。
  2. 可以在<html>上设置边框,因此如果不减去它的值,该函数可能会返回相对于文档的不正确的元素位置。

关于javascript - IE中元素问题的位置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18010218/

相关文章:

javascript - Intro.js 指南编号略有移位

javascript - 在事件当天通过终端启动 Mac 应用程序

javascript - 将文本区域中的值与选择中的元素相乘并相加

javascript - Google 图表适用于 IE7,但不适用于 IE8 或 IE9

javascript - 叠加层可通过其前面的元素点击

javascript - HTML/Javascript/Jquery ListView ?

javascript - 扩展搜索栏在搜索前不扩展

javascript - 使用jquery从数组和html列表中删除项目

javascript - 文本框宽度问题——IE

css - 在 Windows 8 上删除 IE1 1's "clear field"X button