Альтернатива getBoundingClientRect()

Я использую document.body.getBoundingClientRect(). Right, чтобы найти то, что все элементы в моей верхней навигации выходят из поля зрения, чтобы скрыть их и поместить их в выпадающий список "More". Но эта функция, похоже, не работает в сафари. Есть ли какая-либо альтернатива этой функции или я могу как-то исправить ее в сафари?

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());
            }
        }
    });

1 ответ

Поскольку вы используете jQuery, вы можете взглянуть на функции положения и смещения в jQuery.

Чтобы заменить ваш код на jQuery, вы должны сделать:

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

var aTagRightOffset = width + left;

Хорошо пойдем:-)

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});
    }
  }

новый getBounding(".-img",0)

Другие вопросы по тегам