getBoundingClientRect()替代方案

时间:2017-08-02 14:14:04

标签: jquery getboundingclientrect

我正在使用document.body.getBoundingClientRect()。右边找到我顶部导航中的所有元素都不在视图中,以便隐藏它们并将它们放在“更多”下拉列表中。但是这个功能似乎并没有在safari中运行。有什么替代功能,还是有一些方法可以在safari中修复它?

var windowRightOffset = document.body.getBoundingClientRect().right,
        elementHiddenFlag = false;

    $(".headerNav").find("li").each(function() {
        if ($(this).className !== 'more') {
            var elemRightOffset = $(this).find("a")[0].getBoundingClientRect().right;
            if (elemRightOffset > windowRightOffset) {
                $(this).hide();
                elementHiddenFlag = true;
                $(".more .moreNavItems-content").append($(this).html());
            }
        }
    });

2 个答案:

答案 0 :(得分:0)

由于您使用的是jQuery,因此您可以查看jQuery中的positionoffset函数。

要使用jQuery替换代码,您将会这样做:

var aTag = $(this).find("a")[0];
var left = aTag.offset().left;
var width = aTag.find("a")[0].width();

var aTagRightOffset = width + left;

答案 1 :(得分:0)

好吧,放开:-)

function getBounding(name,index){
    this.ele = document.querySelectorAll(name)[index];
    this.y= this.ele.offsetTop;
    this.x= this.ele.offsetLeft;
    this.coordinates();
  }

  getBounding.prototype.coordinates = function(){
    if( this.ele.localName != "body"){
      this.ele = this.ele.offsetParent;
      this.y += this.ele.offsetTop;
      this.x += this.ele.offsetLeft;
      this.coordinates();
    } else {
      return({x:this.x,y:this.y});
    }
  }

new getBounding(“ .- img”,0)