我正在使用 2 个 Javscript 方法将悬停按钮放置在页面上的静态元素内。居中的按钮在第一个元素内输入并使用绝对位置。我用来获取父元素测量值的代码:
// calculate if the element is in the visible window
function elementVisibleRect(element) {
element = $(element);
var rect = {
top: Math.round(element.offset().top),
left: Math.round(element.offset().left),
width: Math.round(element.outerWidth()),
height: Math.round(element.outerHeight())
};
var scrollTop = $(window).scrollTop();
var windowHeight = $(window).height();
var scrollBottom = scrollTop + windowHeight;
var elementBottom = Math.round(rect.height + rect.top);
if (scrollTop < rect.top && scrollBottom > elementBottom) {
return rect;
}
if (scrollTop > rect.top) {
rect.top = scrollTop;
}
if (scrollBottom < elementBottom) {
rect.height = scrollBottom - rect.top;
} else {
rect.height = windowHeight - (scrollBottom - elementBottom);
}
return rect;
}
并使用此信息并将按钮居中
// center the element based on visible screen-frame
function elementPosition (element) {
var visibleRect = elementVisibleRect(element);
$('.editHoverButton').css({
top: visibleRect.top + ((visibleRect.height / 2) - ($('.editHoverButton').outerHeight() / 2)),
left: visibleRect.left + (visibleRect.width / 2) - ($('.editHoverButton').outerWidth() / 2)
});
}
现在我的问题是第三方库需要父 DIV 将位置从浏览器默认的“静态”更改为“相对”,这会破坏我在第二个函数中的计算。
可能为时已晚,但无论我尝试什么,我似乎都无法弄清楚当父元素的位置设置为相对时如何让它工作。我似乎无法完全正确地计算数学,并且我的头开始受伤。有什么建议么?
编辑 - 添加 JSFIDDLE