Альтернатива 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)