2008-10-01 5 views
36

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

+0

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

Odpowiedz

8

Może to być trudne w zależności od przeglądarki i wersji. Sugerowałbym użycie jQuery i wtyczki pozycji.

+9

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

+0

Doskonałe, nie pobrałem jQuery w ciągu kilku miesięcy, dobrze wiedzieć, że je zwinęło. – palehorse

+0

+1 dla jQuery offset – shan

-1

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/

5

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]; 
} 
+0

Powinieneś nadać przypisanie do quirksmode.org, funkcja ta wygląda bardzo znajomo. – pilsetnieks

31

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

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

3

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]; 
    } 
} 
+0

parentPos.X powinien być parentPos [0], parentPos.Y powinien być parentPos [1] – Noah

2

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/