Dez 25

Fenstergröße und Scrollposition in Javascript auslesen

Tag: JavascriptPatrick @ 1:36 am

In Anlehnung an den Bericht von Mark Wilton-Jones über die Ermittlung der Fenstergröße (sowohl Höhe als auch Breite) und der Scrollposition möchte ich hier ebenfalls darüber berichten.

Grundsätzlich bestehen 3, zum Teil sehr Browser- und Browsemodusabhänige, Funktionen zum Auslesen der Höhe und Breite des angezeigten Fensters mittels Javascript.

window.innerHeight / window.innerWidth

– Unterstützt von den meisten Browsern, jedoch nicht vom Internet Explorer

document.body.clientHeight / document.body.clientWidth

– Unterstützt von vielen DOM-fähigen Browsern, einschließlich des Internet Explorers.

document.documentElement.­clientHeight / document.documentElement.­clientWidth

– Unterstützt von den meisten DOM-fähigen Browsern, einschließlich des Internet Explorers.

Entsprechend dem Grundwissen und der Tabelle auf howtocreate.co.uk bezüglich der Unterstützung in den verschiedenen Browserversionen baut man sich eine Javascript-Funktion zum Auslesen der Größenangabe des Anzeigefensters zusammen:

function getSize() {
	var myWidth = 0, myHeight = 0;

	if( typeof( window.innerWidth ) == 'number' ) {
		//Non-IE
		myWidth = window.innerWidth;
		myHeight = window.innerHeight;
	} else if( document.documentElement && ( document.documentElement.clientWidth || document.documentElement.clientHeight ) ) {
		//IE 6+ in 'standards compliant mode'
		myWidth = document.documentElement.clientWidth;
		myHeight = document.documentElement.clientHeight;
	} else if( document.body && ( document.body.clientWidth || document.body.clientHeight ) ) {
		//IE 4 compatible
		myWidth = document.body.clientWidth;
		myHeight = document.body.clientHeight;
	}
	return [ myWidth, myHeight ];
}

Um die Auszulesen wie weit auf einer Seite gescrollt wurde, verfährt man ganz ähnlich. Wieder stehen 3 Funktionen zur Verfügung.

window.pageYOffset / window.pageXOffset

– Unterstützt von den meisten Browsern, jedoch nicht vom Internet Explorer

document.body.scrollTop / document.body.scrollLeft

– Unterstützt von den einigen Browsern, einschließlich des Internet Explorers.

document.documentElement.scrollTop / document.documentElement.scrollLeft

– Unterstützt von den einigen Browsern, einschließlich des Internet Explorers (strict-mode).

Auch diesmal erstellt entsprechend diesem Wissens eine Javascript-Funktion, die uns die gewünschten Werte liefert:

function getScrollXY() {
	var scrOfX = 0, scrOfY = 0;

	if( typeof( window.pageYOffset ) == 'number' ) {
		//Netscape compliant
		scrOfY = window.pageYOffset;
		scrOfX = window.pageXOffset;
	} else if( document.body && ( document.body.scrollLeft || document.body.scrollTop ) ) {
		//DOM compliant
		scrOfY = document.body.scrollTop;
		scrOfX = document.body.scrollLeft;
	} else if( document.documentElement && ( document.documentElement.scrollLeft || document.documentElement.scrollTop ) ) {
		//IE6 standards compliant mode
		scrOfY = document.documentElement.scrollTop;
		scrOfX = document.documentElement.scrollLeft;
	}
	return [ scrOfX, scrOfY ];
}

22 Antworten zu “Fenstergröße und Scrollposition in Javascript auslesen”

  1. micha sagt:

    werden diese werte auch zuverlässig ermittelt, wenn das javascript innerhalb von relativ oder absolut positionierten elementen eingesetzt wird?

  2. Patrick sagt:

    Die ermittelten Werte beziehen sich auf das window- repektive document-Element. Damit sind die Werte unabhängig davon, von wo man die Funktion aufruft. Es spielt also keine Rolle, ob die Funktion innerhalb eines positionieren Elements steht.

  3. Andreas D. sagt:

    Das Ganze kann man sogar noch ein bisschen hübscher und kompakter haben:
    var de = document.documentElement;
    var myWidth = window.innerWidth || self.innerWidth || (de&&de.clientWidth) || document.body.clientWidth;
    var myHeight = window.innerHeight || self.innerHeight || (de&&de.clientHeight) || document.body.clientHeight;

    Funktioniert auch in allen mir bekannten Browsern und müsste sich auch entsprechend auf die Scroll-Position übertragen lassen. Werde ich bei Gelegenheit mal ausprobieren

  4. Patrick sagt:

    Vielen Dank für den Hinweis. Dieses Vorgehen kannte ich bisher noch nicht. Ich werde es ebenfalls testen.

  5. Patrick sagt:

    Ich hab den Vorschlag von Andreas in zwei Funktionen verarbeitet:
    function getWidth() {
    var de = document.documentElement;
    var myWidth = window.innerWidth || self.innerWidth || (de&&de.clientWidth) || document.body.clientWidth;
    return myWidth;
    }
    document.getWidth=getWidth;

    function getHeight() {
    var de = document.documentElement;
    var myHeight = window.innerHeight || self.innerHeight || (de&&de.clientHeight) || document.body.clientHeight;
    return myHeight;
    }
    document.getHeight=getHeight;

    Hier noch zwei Testaufrufe:
    alert(document.getWidth());
    alert(document.getHeight());

    Viel Spaß damit!

  6. Daniel sagt:

    Firefox (und vielleicht auch andere) unterstützt außerdem window.scrollX und window.scrollY. IE natürlich nicht, bevor jemand fragt…

  7. Spaß! sagt:

    Danke, hat mir etwas weitergeholfen bei meinem Problem 🙂

  8. Meissen sagt:

    Das war genau was ich gesucht habe, vielen Dank an alle…

  9. Anonymous sagt:

    […] […]

  10. rob sagt:

    sauber

  11. Y Position merken - php.de sagt:

    […] … Fenstergröße und Scrollposition in Javascript auslesen | Ajaxschmiede.de __________________ Ich behandel Objekte wie […]

  12. Herbert sagt:

    Guter Tipp, Danke 🙂

  13. Atilla sagt:

    Das hat mir eben wirklich gut weiter geholfen.

    Danke 🙂

  14. Thomas sagt:

    Funktioniert! Klasse, vielen Dank – diese IEs, ich dachte da wird mal etwas besser… =)

  15. Raoul Kramer » Blog Archive » scrollto infinite (mit jquery) sagt:

    […] Jetzt muss man feststellen ob das div#infiniteSpinner im sichtbaren Bereich des Nutzers ist. Auch hier spielen IE7 und IE8 ihr eigenes Spiel, daher nutzte ich zur Bestimmung der Scrollposition im Browser die Funktion getScrollXY() von Ajaxschmiede.de. […]

  16. Anna sagt:

    Der Vorschlag von Patrik funktioniert! 🙂
    Danke Dir!

  17. scorp sagt:

    var D = document;
    var myHeight = Math.max(
    D.body.scrollHeight, D.documentElement.scrollHeight,
    D.body.offsetHeight, D.documentElement.offsetHeight,
    D.body.clientHeight, D.documentElement.clientHeight
    );

    alert(myHeight);

  18. Ludwig S. sagt:

    Danke, es funktioniert!
    Ich habe nur ein Problem mit der Scrollfunktion (in Firefox):

    document.write(„„);

    hier soll ein Button sein, der per Klick an den Anfang der Website verweist und beim herunterscrollen eingeblendet wird. Der Button wird aber nur sichtbar, wenn man herunterscrollt und dann die Seite aktualisiert! Wie kann man es anstellen, dass der Scrollwert immer aktuell ist?

  19. Ludwig S. sagt:

    Der Code wird nicht angezeigt! Ich versuchs noch mal:

    document.write(\“\“);

  20. Ludwig S. sagt:

    document.write();

  21. Ludwig S. sagt:

    läuft stressfrei mit WordPress???

  22. Dwza sagt:

    Das sollte dann die kurze zum scrollen sein. (Nicht getested)
    var doE = document.documentElement;
    var scrollX = window.pageXOffset || self.pageXOffset || (doE&&doE.scrollLeft) || document.body.scrollLeft;
    var scrollY = window.pageYOffset || self.pageYOffset || (doE&&doE.scrollTop) || document.body.scrollTop;

Hinterlasse einen Kommentar

You must be logged in to post a comment.