0

次のJavaScript関数を使用して、要素の絶対位置を取得しています

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

この関数は、IE を除くすべてのブラウザで正常に動作しています。IE ではフルスクリーンでも正常に動作しますが、ブラウザのサイズが変更されると、このメソッドは正しくないオフセットを返します。

これについて私を助けてくれませんか

4

1 に答える 1

2

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>。そのため、その値を減算しないと、関数はドキュメントに対して誤った要素位置を返す可能性があります。
于 2013-08-02T08:34:52.440 に答える