2016-06-22 68 views
1

我有一些元素中心的坐标也是绝对位置的其他元素的子元素的一些问题。 Here you can see a screenshot with the order of elements.如何用绝对位置获取元素的绝对坐标(JavaScript,浏览器)

要理解这个问题你可以更好的访问我repository at GitHub.的index.html是在文件夹“/资源”

所以,我有一些其他的可拖动窗口和我的一些可拖动的窗口(与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( '数据-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

使用jQuery偏移()函数,它给你的顶部和左侧的元素。?。
返回顶部和左侧是位于文档而不是窗口内的位置。
如果你想窗口内的位置,减去窗口的scrollTop的和scrollLeft从这些值是这样的:

var offset = $("selector").offset(); 
var posY = offset.top - $(window).scrollTop(); 
var posX = offset.left - $(window).scrollLeft(); 
+0

是的,它的工作,但[不是很好..](https://yadi.sk/i/V_6lhY7Jsijpa)它是[绝对错误的顶部](https://yadi.sk/i/SgESso8A sikGm) –

+0

@LevBalagurov,我编辑了答案,再看看。窗口可能有滚动,你得到了错误的顶部 –

+0

但窗口没有滚动。 [截图](https://yadi.sk/i/fjtDMhwFsj64A)我认为带偏移量的标准方法在这里不起作用。也许我们应该使用样式的参数:top,left –

4

试试这个。作品最好

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); 
+0

你救了我的命 – Seungwon