Koordinaten des Sichtbarkeitsbereiches

T

TobiNeu

Hallo,

Ich habe das Problem das ich ein ziemlich großen Baum mit mehreren tausend Einheiten entwickelt habe.
Nun kann man per suche im anderen Frame zu einer komplett anderen Einheit springen.
Der Baum ist soweit, dass der Baum bis zur gesuchten Einheit geöffnet und diese makiert wird.
Das Problem ist jedoch, dass wenn mehrere Pfade im Baum geöffnet sind, liegt die gesuchte Einheit sehr schnell außerhalb des Sichtbarkeitsprogramm. Dies muss ich nun mit Hilfe der scrollTo-Funktion beheben.


Nun hab ich mir das wie folgt vorgestellt:

Code:
 //Position der Einheit zu der gescrollt werden soll herausfinden
 var y = getY(document.getElementById(currentKey));
 var x = getX(document.getElementById(currentKey));

Die Funktionen sehen wie folgt aus:
Code:
function getY(oElement) {
	var iReturnValue = 0;
	while( oElement != null ) {
		iReturnValue += oElement.offsetTop;
		oElement = oElement.offsetParent;
	}
	return iReturnValue;
}

function getX(oElement) {
	var iReturnValue = 0;
	while( oElement != null ) {
		iReturnValue += oElement.offsetLeft;
		oElement = oElement.offsetParent;
	}
	return iReturnValue;
}

Und im letzten Schritt überrpüfen ob die position des elementes im aktuellen Sichtbarkeitsbereich liegt:

Code:
  if (y<window.pageYOffset || y>window.pageYOffset+window.pageY) {  	
  	window.scrollTo(x-40,y-100);
  }

Ich denke mein Fehler liegt in der if-Abfrage im letzten Bereich, den ohne die if Abfrage scrollt er immer zum gewümschten Element.

Wäre klasse wenn mir jemand helfen könnte.

Viele Grüße
 
Moin Tobi,

ich muss gestehen, ich habe mir deinen Code nicht weiter angeschaut :-(

Warum: nach deiner Beschreibung zu Urteilen gibt es für das, was du willst, einen einfacheren Weg: scrollIntoView
 
Vielen Dank,

durch deine Funktion erspar ich mir mein getX und getY welches ich für das scrollen benötige.

Das übernehm ich, da es wneiger Code -> übersichtlicher ist

Mein Problem war jedoch, das ich nur dann Scrollen will wenn die ID zu der gescrollt werden will außerhalb des Anzeigebereichs liegt.

Dies habe ich nun so gelöst:

Code:
var treeTop = window.pageYOffset+ parent.frames['headerFrame'].innerHeight;
var treeBottom = window.pageYOffset+window.innerHeight;
 	
 if (y<treeTop || y>treeBottom) {  
  	document.getElementById(currentKey).scrollIntoView();
 }

http://www.mediaevent.de/javascript/window-browserfenster.html
Hier ist eine ganz gute Beschreibung zu einem Browserfenster und wie man an die Koordinaten kommt.

Danke nochmals
 
Zurück