Mrz 08

Erweiterung der div-Scroll-Funktion

Tag: JavascriptPatrick @ 11:40 am

Durch den Kommentar von Jan zu meinem Beitrag über die von mir geschriebene Funktion zum Scrollen mittels div-Elementen angeregt, habe ich diese Funktion derart erweitert, dass nun auch eine Scroll-Begrenzung nach unten besteht. Damit ist das Problem des Endlos-Scrollens nach unten behoben.

Um die Höhe des div-Elements, in dem der anzuzeigende Inhalt steht, zu bestimmen, benutze ich die Javascript-Methode offsetHeight. Von dieser ermittelten Höhe ziehe ich die Höhe des Anzeigebereichs (tool-div) ab und erhalte damit den unteren Grenzwert beim Scrollen.

Der Code der erweiterten Funktion sieht nun wie folgt aus:

function moveDIV( var1, var2 ) {
	if ( var1 == 0 ) {
		document.getElementById("zeug").style.left = "0px";
		document.getElementById("zeug").style.top = "0px";
	} else {
		if ( var2 ) {
			/* alter Wert ohne Einheit */
			var2 = document.getElementById("zeug").style.left;
			var2 = Number(var2.substring(0, var2.length-2)) + var1;
			
			var3 = document.getElementById("zeug").style.width;
			var3 = Number(var3.substring(0, var3.length-2));
			
			var4 = document.getElementById("tool").style.width;
			var4 = Number(var4.substring(0, var4.length-2)) - var3;

			// wenn nicht am linken "rahmen" angekommen
			if ( var2 <= 0 ) {
				// wenn nicht am rechten "rahmen" angekommen
				if ( var2 >= var4 ) {
					document.getElementById("zeug").style.left = var2 + "px";
				} else {
					document.getElementById("zeug").style.left = var4 + "px";
				}
			} else {
				document.getElementById("zeug").style.left = "0px";
			}
		} else {
			/* alter Wert ohne Einheit */
			var2 = document.getElementById("zeug").style.top;
			var2 = Number(var2.substring(0, var2.length-2)) + var1;

			var3 = document.getElementById("zeug").offsetHeight;
			
			var4 = document.getElementById("tool").style.height;
			var4 = Number(var4.substring(0, var4.length-2)) - var3;

			// wenn nicht am oberen "rahmen" angekommen
			if ( var2 <= 0 ) {
				// wenn nicht am unteren "rahmen" angekommen
				if ( var2 >= var4 ) {
					document.getElementById("zeug").style.top = var2 + "px";
				} else {					
					document.getElementById("zeug").style.top = var4 + "px";
				}
			} else {
				document.getElementById("zeug").style.top = "0px";
			}
		}
	}
}

Das Script in Aktion kann auf dieser Demoseite angesehen werden.

4 Antworten zu “Erweiterung der div-Scroll-Funktion”

  1. Arnd sagt:

    Hallo,

    vielen Dank für diese sehr nützliche Funktion!
    Ich möchte einen Vorschlag machen: Mit nur sehr wenigen Änderungen wird die Lösung sogar barrierefrei.

    1. Setze die Box #tool per CSS auf overflow:auto;
    2. Und setze sie erst per JS auf overflow:hidden, also

    3. Wenn’s perfekt sein soll: Schreibe das Fadenkreuz ebenfalls erst per JS ins Dokument.

    Fertig! Wenn JS aus ist, erscheinen normale Scrollbalken, ansonsten das Fadenkreuz zum Scrollen.

    Gruß Arnd

  2. Patrick sagt:

    Vielen Dank für deine Idee, Arnd.
    Ich hab alle 3 Vorschläge von dir angenommen. Anstatt das Fadenkreuz per JS ins Dokument zu schreiben, habe ich den Weg über die css-Eigenschaft ‚visibility: hidden‘ gewählt. Nach dem Laden des Dokumentes wird das Fadenkreuz per Javascript sichtbar und der normale Scrollbalken wird ausgeblendet.

  3. azella sagt:

    Einwandfrei, Danke Dir.

  4. Jörg sagt:

    Rückfrage zu deinem scrollenden div.:
    Könnte man das Scrollen auch davon abhängig machen ob ein element, z.b eine Figur den rechten bzw. unteen Rand des divs erreicht , um dann auf den nächsten Teilbereich eines z.B Spielbrettes zu kommen , bzw diesen dann entsprechend nachladen?

Hinterlasse einen Kommentar

You must be logged in to post a comment.