2013-07-16 17 views
8

Ich habe den Körper der Seite 200% groß gemacht, so dass es zweimal auf einen Bildschirm passt. Unter Verwendung von Javascript lasse ich Scrollen nach oben oder unten scrollen. Dazu muss ich den niedrigsten Scrollpunkt der Seite in jedem Browser oder auf jeder Bildschirmgröße herausfinden, damit er aufhört, wenn er dort ankommt.Finden der maximalen Scroll-Position einer Seite

Keine JQuery bitte.
Danke.

Mein Code: (es noch zusammengestellt werden muss, um ein wenig Arbeit)

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

function scrollup() { 
    if (xy[1] > 0) { 
     window.scrollBy(0,-100); 
     setTimeout(scrollup,200); 
    } else { 
     null; 
    } 
} 

function scrolldown() { 
    if (xy[1] <) { 
     window.scrollBy(0,100); 
     setTimeout(scrolldown,200); 
    } else { 
     null; 
    } 
} 

function dothescroll() { 
    var xy = getScrollXY(); 
    var y = xy[1]; 
    setTimeout(function(){ 
     if (xy[1] > y) { 
      scrollup(); 
     } else { 
      scrolldown(); 
     } 
    },200); 
} 

Antwort

18

Dies ist die Cross-Browser-kompatible Version:

var limit = Math.max(document.body.scrollHeight, document.body.offsetHeight, 
        document.documentElement.clientHeight, document.documentElement.scrollHeight, document.documentElement.offsetHeight); 
+3

wenn Sie dann minus durch window.innerHeight, dass die maximale scroll position.x ist –

+7

geschrieben Nicht so weit die Wahrheit: var Limit = Math.max (document.body.scrollHeight, document.body.offsetHeight, document.documentElement.clientHeight, document.documentElement.scrollHeight, document.documentElement.offsetHeight) - window.innerHeight; – Jordan

6
var limit = document.body.offsetHeight - window.innerHeight; 
// document.body.offsetHeight = computed height of the <body> 
// window.innerHeight = available vertical space in the window 

Vergleichen xy[1] < limit

Hinweis: Sie können den Wert von Marge erhöhen müssen und/oder Polsterung des Körpers. Sie können auch versuchen, clientHeight anstelle von offsetHeight zu verwenden.

+0

das ist perfekt :) x –

+0

nicht ganz perfekt sorry, es war nicht Cross-Browser kompatibel. Ich werde es unter diesem Artikel posten: –

+0

@Neil - Ich habe Ihren letzten Kommentar nicht ganz bekommen. Bitte teile die Probleme, die du damit gefunden hast. – vsync

1

window.scrollTo (0, document.body.scrollHeight);

dies funktionieren wird ..

+0

Bitte erläutern Sie den Grund, warum diese Zeile nicht funktioniert, und schlagen Sie eine Lösung vor – tutuDajuju

0

Während dies nicht Teil einer Spezifikation ist, könnten Sie window.scrollMaxY versuchen.

Gibt die maximale Anzahl von Pixeln zurück, um die das Dokument vertikal gescrollt werden kann. https://developer.mozilla.org/docs/Web/API/Window/scrollMaxY


Rückfall, wenn nicht verfügbar:

var scrollMaxY = window.scrollMaxY || (document.documentElement.scrollHeight - document.documentElement.clientHeight) 

Hinweis ist documentElement nicht immer das Scrollen Element (einige Browser verwenden body statt). Die Lösung ist die neue scrollingElement-Eigenschaft, die einen Verweis auf das Element zurückgibt, das das Dokument scrollt. Es ist angegeben, aber immer noch ein Arbeitsentwurf.

Verwandte Themen