Jak mogę znaleźć współrzędne XY elementu HTML (DIV) z JavaScript, jeśli nie zostały jawnie ustawione?Znajdź X/Y elementu HTML z JavaScript
Odpowiedz
Może to być trudne w zależności od przeglądarki i wersji. Sugerowałbym użycie jQuery i wtyczki pozycji.
Większość wtyczek pozycji jest teraz częścią rdzenia jQuery. Więc możesz po prostu zrobić $ (element) .offset ({relativeTo: "body"}) - a to da ci górę i lewo obiektu względem ciała. – Sugendran
Doskonałe, nie pobrałem jQuery w ciągu kilku miesięcy, dobrze wiedzieć, że je zwinęło. – palehorse
+1 dla jQuery offset – shan
Nie jestem pewien, czego potrzebujesz, a takie rzeczy zawsze są względne (ekran, okno, dokument). Ale kiedy potrzebne do tego dowiedzieć, znalazłam tę witrynę pomocne: http://www.mattkruse.com/javascript/anchorposition/source.html
I ja także, że ktoś plugin etykietka wykonana dla jQuery miał wszelkiego rodzaju ciekawych wgląd do x, sztuczki pozycjonowania y (spojrzeć na jego rzutni klasa i podstawowa obsługa jQuery zapewnia to). http://bassistance.de/jquery-plugins/jquery-plugin-tooltip/
Można użyć biblioteki takie jak Prototype lub jQuery, można też użyć this handy function:
Zwraca tablicę.
myPos = findPos(document.getElementById('something'))
x = myPos[0]
y = myPos[1]
function findPos(obj) {
var curleft = curtop = 0;
if (obj.offsetParent) {
curleft = obj.offsetLeft
curtop = obj.offsetTop
while (obj = obj.offsetParent) {
curleft += obj.offsetLeft
curtop += obj.offsetTop
}
}
return [curleft,curtop];
}
Powinieneś nadać przypisanie do quirksmode.org, funkcja ta wygląda bardzo znajomo. – pilsetnieks
Oto jak to zrobić:
// Based on: http://www.quirksmode.org/js/findpos.html
var getCumulativeOffset = function (obj) {
var left, top;
left = top = 0;
if (obj.offsetParent) {
do {
left += obj.offsetLeft;
top += obj.offsetTop;
} while (obj = obj.offsetParent);
}
return {
x : left,
y : top
};
};
Wydaje mi się, że wolę twój pomysł, aby zwrócić obiekt nad wyborem Petera-Paula Kocha, który zwrócił tablicę w swoim oryginalnym rozwiązaniu. – cssimsek
Na co warto, oto rekurencyjna wersja:
function findPos(element) {
if (element) {
var parentPos = findPos(element.offsetParent);
return [
parentPos.X + element.offsetLeft,
parentPos.Y + element.offsetTop
];
} else {
return [0,0];
}
}
parentPos.X powinien być parentPos [0], parentPos.Y powinien być parentPos [1] – Noah
Możesz dodać dwie właściwości do Element.prototype
dostać góra/lewo dowolnego elementu.
window.Object.defineProperty(Element.prototype, 'documentOffsetTop', {
get: function() { return this.offsetTop + (this.offsetParent ? this.offsetParent.documentOffsetTop : 0); }
});
window.Object.defineProperty(Element.prototype, 'documentOffsetLeft', {
get: function() { return this.offsetLeft + (this.offsetParent ? this.offsetParent.documentOffsetLeft : 0); }
});
Oto demo porównując wyniki jQuery offset().top
i .left
: http://jsfiddle.net/ThinkingStiff/3G7EZ/
zamknięty jako duplikat jak za http://meta.stackexchange.com/questions/147643/should-i-vote-to- close-a-duplicate-question-even-and-its-manyer now-and-ha – user123444555621