2

要获得元素偏移量,我使用:

function(el) {
    if(el && el.parentNode) {
        var x = 0;
        var y = 0;
        while(el) {
            x += el.offsetLeft;
            y += el.offsetTop;
            el = el.offsetParent;
        }
        return {x: x, y: y};
    }
    return null;
}

并获得它的滚动偏移量,我使用:

function(el) {
    if(el && el.parentNode) {
        var x = 0;
        var y = 0;
        while(el) {
            if(el && el.parentNode) {
                x += el.scrollLeft;
                y += el.scrollTop;
                el = el.parentNode;
            } else {
                el = null;
            }

        }
        return {x: x, y: y};
    }
    return null;
}

问题是我不知道如何将这两个函数合并在一起,所以我可以获得一个元素偏移量,包括在页面上完成的任何滚动。在设置元素位置时,我通常只需要引用这两个函数,但似乎只在一个函数中获取总偏移量是有意义的。我怎样才能做到这一点?在一个函数中完成这一切是否是一个好主意,或者是否有特定的用例在没有滚动的情况下获得偏移量是个好主意?

4

1 回答 1

0

你的意思是这样的?

function f (el) {
  var offset = (function(el) {
    if(el && el.parentNode) {
      var x = 0;
      var y = 0;

      while(el) {
        x += el.offsetLeft;
        y += el.offsetTop;
        el = el.offsetParent;
      }

      return {x: x, y: y};
    }

    return null;
  })(el);

  var scroll = (function(el) {
    if(el && el.parentNode) {
      var x = 0;
      var y = 0;

      while(el) {
        if(el && el.parentNode) {
          x += el.scrollLeft;
          y += el.scrollTop;
          el = el.parentNode;
        } else {
          el = null;
        }
      }

      return {x: x, y: y};
    }

    return null;
  })(el);

  return { x: offset.x + scroll.x, y: offset.y + scroll.y }
}
于 2012-07-28T14:13:34.213 回答