【发布时间】:2021-05-28 05:36:22
【问题描述】:
我在获取元素中心的坐标时遇到了一些问题,该中心也是具有绝对位置的其他元素的子元素。 Here you can see a screenshot with the order of elements.
为了更好地理解问题,您可以访问我的repository at GitHub. index.html 在文件夹“/Resources”中
所以,我在其他一些可拖动窗口中有一些可拖动窗口(带有interact.js),我想通过lines-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) }
}
你能帮我获取中心坐标吗?提前致谢
【问题讨论】:
标签: javascript html position interact.js