Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用绝对位置获取元素的绝对坐标(JavaScript、浏览器)_Javascript_Html_Position_Interact.js - Fatal编程技术网

如何使用绝对位置获取元素的绝对坐标(JavaScript、浏览器)

如何使用绝对位置获取元素的绝对坐标(JavaScript、浏览器),javascript,html,position,interact.js,Javascript,Html,Position,Interact.js,我在获取一个元素的中心坐标时遇到了一些问题,它也是另一个具有绝对位置的元素的子元素。 为了更好地理解这个问题,您可以访问my index.html位于文件夹“/Resources”中 因此,我在其他一些可拖动窗口中有一些可拖动窗口(带有interact.js),我想通过线div连接它们的中心(它们是使用div和一些转换绘制的) 我使用渲染线条(这里可能有一些问题)。我曾尝试使用jsPlumb绘制线条,但失败了:( 这里有x点和y点 // bottom right var x1

我在获取一个元素的中心坐标时遇到了一些问题,它也是另一个具有绝对位置的元素的子元素。

为了更好地理解这个问题,您可以访问my index.html位于文件夹“/Resources”中

因此,我在其他一些可拖动窗口中有一些可拖动窗口(带有interact.js),我想通过线div连接它们的中心(它们是使用div和一些转换绘制的)

我使用渲染线条(这里可能有一些问题)。我曾尝试使用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) }
}
您能帮我获取中心坐标吗?提前感谢使用jQuery offset()函数。它提供元素的顶部和左侧。
返回顶部和左侧位于文档非窗口内。
如果需要窗口内的位置,请从这些值中减去scrollTop和scrollLeft,如下所示:

var offset = $("selector").offset();
var posY = offset.top - $(window).scrollTop();
var posX = offset.left - $(window).scrollLeft();
 var coords = getPos(document.querySelector("el"));
 alert(coords.x);alert(coords.y);
试试这个……效果最好

 function getPos(el) {
     var rect=el.getBoundingClientRect();
     return {x:rect.left,y:rect.top};
 }
像这样使用它:

var offset = $("selector").offset();
var posY = offset.top - $(window).scrollTop();
var posX = offset.left - $(window).scrollLeft();
 var coords = getPos(document.querySelector("el"));
 alert(coords.x);alert(coords.y);

这里是更精确的方法

我也经历过类似的问题,就像你所面临的

下面是纯javascript解决方案。 试试这个

然后通过调用

left = obj.left;
right = obj.right;
width = obj.width;
height = obj.height;
此方法计算坐标,包括填充、边距、边框和滚动偏移


如果你有可拖动的对象,然后使用event.pageX/Y找到它的位置。是的,它可以工作,但它是@LevBalagurov,我编辑了答案,再看一看。窗口可能有滚动条,但你得到了错误的顶部,但窗口没有滚动条。我认为带偏移量的标准方法在这里不起作用。也许我们应该使用样式的参数:top,left,但现在我知道如何处理轴X:
var x1=offset1.left-margin1.left-parseInt(window.getComputedStyle(Field.paddingLeft.replace('px','')+size1.width/2-(this.dom.getAttribute('data-X')| 0)
你救了我的命没问题!!很高兴知道我帮了忙。