В общем, если у вас есть элемент с именем elem
, на самом деле довольно просто получить координаты X и Y левого верхнего угла элемента, если вы хотите, чтобы они были в координатах документа, Во всех браузерах это возвращается свойствами elem.offsetLeft
и elem.offsetTop
.
Единственная уловка, о которой вы должны знать, это то, что если elem
абсолютно позиционирован в другом элементе, скажем, div
с левым / верхним полем 20px, эти свойства вернут 0, так как это принимает учитывать текущий элемент, а не всю цепочку элементов. К счастью, мы можем использовать функцию «обхода цепочки» для захвата всех полей элементов, связанных с данным элементом, и подсчитать их, чтобы получить правильные координаты документа.
Как упоминал Симе Видас, есть также свойства position()
и offset()
в JQuery, в этом случае вам понадобятся свойства offset()
.
Вы также можете использовать метод getBoundingClientRect()
, однако он возвращает координаты элемента относительно его offsetParent
и, следовательно, не совсем надежен. Посмотрите на следующие примеры:
// getPosition function
function getPosition(elem){
var dims = {offsetLeft:0, offsetTop:0};
do {
dims.offsetLeft += elem.offsetLeft;
dims.offsetTop += elem.offsetTop;
}
while (elem = elem.offsetParent);
return dims;
}
cont1.style.position = "absolute";
cont1.style.marginLeft = "10px";
cont2.style.position = "absolute";
cont2.style.marginLeft = "10px";
box.style.position = "absolute";
box.style.marginLeft = "10px";
console.log(getPosition(box).offsetLeft); // returns "30"
console.log(getPosition(box).offsetTop); // returns "0"
// or in JQuery
console.log($(box).offset().left) // also returns "30"
console.log($(box).offset().top) // also returns "0"
Также я предлагаю вам прочитать это .