元素问题在IE中的位置

position of element issue in IE?

本文关键字:位置 IE 问题 元素      更新时间:2023-09-26

我正在使用以下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>上设置边界,因此如果不减去其值,函数可能会返回相对于文档的错误元素位置