我在获取元素中心的坐标时遇到一些问题,这个坐标也是绝对位置的其他元素的子元素。 Here you can see a screenshot with the order of elements.
为了更好地理解这个问题,您可以访问我的repository at GitHub. index.html文件夹“/ Resources”
所以,我在其他一些可拖动的窗口中有一些可拖动的窗口(带有interact.js),我想通过line-div连接它们的中心(它们是使用带有一些转换的div绘制的)。
我使用this method来渲染线条(这里可能存在一些问题)。我曾尝试使用jsPlumb绘制线条,但我失败了:(
得分x和y。
// bottom right
var x1 = offset1.left - margin1.left + size1.width/2 - (this.dom.getAttribute('data-x') || 0);
var y1 = offset1.top - margin1.top + size1.height/2 - (this.dom.getAttribute('data-y') || 0);
// top right
var x2 = offset2.left - margin2.left + size2.width/2 - (this.dom.getAttribute('data-x') || 0);
var y2 = offset2.top - margin2.top + size2.height/2 - (this.dom.getAttribute('data-y') || 0);
(this.dom.getAttribute('data-x')|| 0) - 那是Interact.js。
function getMargins(elem) {
var top = 0, left = 0;
while (elem.parentNode) {
top = top + parseFloat(window.getComputedStyle(elem).marginTop.replace('px', ''));
left = left + parseFloat(window.getComputedStyle(elem).marginLeft.replace('px', ''));
elem = elem.parentNode;
}
return { top: Math.round(top), left: Math.round(left) }
}
function getOffsetRect(elem) {
// (1)
var box = elem.getBoundingClientRect()
// (2)
var body = document.body
var docElem = document.documentElement
// (3)
var scrollTop = window.pageYOffset || docElem.scrollTop || body.scrollTop
var scrollLeft = window.pageXOffset || docElem.scrollLeft || body.scrollLeft
// (4)
var clientTop = docElem.clientTop || body.clientTop || 0
var clientLeft = docElem.clientLeft || body.clientLeft || 0
// (5)
var top = box.top + scrollTop - clientTop
var left = box.left + scrollLeft - clientLeft
return { top: Math.round(top), left: Math.round(left) }
}
你能帮助我获得中心坐标吗?提前致谢
答案 0 :(得分:7)
试试这个..效果最好
function getPos(el) {
var rect=el.getBoundingClientRect();
return {x:rect.left,y:rect.top};
}
像这样使用:
var coords = getPos(document.querySelector("el"));
alert(coords.x);alert(coords.y);
答案 1 :(得分:1)
使用jQuery offset()函数。它为您提供元素的顶部和左侧。
返回顶部和左侧是文档而非窗口内的位置。
如果你想要窗口内的位置,从这些值中减去scrollTop和scrollLeft窗口:
var offset = $("selector").offset();
var posY = offset.top - $(window).scrollTop();
var posX = offset.left - $(window).scrollLeft();
答案 2 :(得分:0)
这里是更准确的方法
我也遇到过和你一样的问题...
这是纯 javascript 解决方案。 试试这个
var top = 0,
left = 0,
width = 0,
height = 0;
let bound = element.getBoundingClientRect();
height = bound.height;
width = bound.width;
do {
bound = element.getBoundingClientRect();
top += bound.top;
left += bound.left;
element = element.offsetParent;
if (element !== null) {
bound = element.getBoundingClientRect();
top -= bound.top - window.scrollY;
left -= bound.left - window.scrollX;
}
} while (element);
return {
top: top,
left: left,
width: width,
height: height
};
};
然后通过调用获取元素相对于整个文档的坐标
left = obj.left;
right = obj.right;
width = obj.width;
height = obj.height;
该方法计算的坐标包括 padding , margin , border 和 scroll offset..
如果你有可拖动的对象,那么使用 event.pageX / Y 找到它的位置