2013-11-15 46 views
5

是否有任何元素的定位沒有使用e.pageX和e.pageY。如何在不使用事件的情況下獲取元素的pageX和pageY

入住這fiddle

的小提琴實際上是在什麼即時試圖問一個貧窮的嘗試,但我雖然視覺例子會更好。我想知道的是,是否有可能通過使用

document.getElementByID('elementID'); 

也許

document.getElementsByTagName('TagName'); 

編輯引用找上了DOM任何元素的X和Y座標:雖然我在FIDDLE中使用了Jquery,我想只使用JavaScript的可能解決方案。

回答

9

您可以使用

document.getElementById("elementID").offsetTop; 
document.getElementById("elementID").offsetLeft; 

參考MDN。它們返回父元素的偏移量。如果你需要元素相對於整個身體的偏移量,它可能會變得更加棘手,因爲你必須對鏈中每個元素的偏移量求和。
分別針對.getElementsByTagName,因爲DOM中的每個對象都具有這些屬性。

.getBoundingClientRect也是worth a look

var clientRectangle = document.getElementById("elementID").getBoundingClientRect(); 
console.log(clientRectangle.top); //or left, right, bottom 
1

我認爲offset()應該可以工作。

$(element).offset() //will get {top:.., left:....} 
2

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<script> 
 
$("#something").click(function(e){ 
 
    var parentOffset = $(this).parent().offset(); 
 
    //or $(this).offset(); if you really just want the current element's offset 
 
    var relX = e.pageX - parentOffset.left; 
 
    var relY = e.pageY - parentOffset.top; 
 
}); 
 
</script>

0

你可以找到幾乎所有的jQuery的東西在這裏: http://youmightnotneedjquery.com/

$(el).offset(); 

一樣:

var rect = el.getBoundingClientRect(); 

{ 
    top: rect.top + document.body.scrollTop, 
    left: rect.left + document.body.scrollLeft 
} 
相關問題