DIV-Element ein- und ausblenden

Status
Nicht offen für weitere Antworten.

tantebootsy

Erfahrenes Mitglied
Hi,

ich möchte den Inhalt eines divs, der beim Laden der Seite über den Alpha-Filter des IE eingefadet wurde, über eine Schaltfläche wieder ausblenden.
Ich habe nun das Problem, dass sich die beiden Funktionen anscheinend gegenseitig blockieren, das Ausblenden funktioniert demnach nicht.
Hier mal der Code dazu:
PHP:
var a=0
function fadeIn(){
	if(document.all)
		document.getElementById("fadebereich").filters.alpha.opacity=a;
		a++;
		setTimeout("fadeIn()",100);
		if(a==100)
			document.getElementById("fadebereich").filters.alpha.opacity=100;
}

function fadeOut(){
	if(document.all)
		document.getElementById("fadebereich").filters.alpha.opacity=a;
		a--;
		setTimeout("fadeOut()",100);
		if(a==0)
			document.getElementById("fadebereich").filters.alpha.opacity=0;
}

In Flash ist es möglich, eine Funktion wieder zu "entladen", damit sie eine neue Funktion nicht mehr blockiert. Ist so etwas ähnliches auch bei JS möglich?
Dann könnte ich in der fadeOut()-Funktion die FadeIn() entladen + die beiden würden sich nicht mehr gegenseitig blockieren.
Oder habt ihr vielleicht ne andere Idee dieses Problem zu lösen?

Hab schon in SelfHTML gesucht aber nicht passendes gefunden ...

Gruß,
Micha
 
versuche mal, die beiden Timeouts in einer global verfügbaren Variable zu speichern....und vor allem: sobald der Endzustand der jeweiligen Funktion erreicht wurde, ....höre damit auf, die Funktion weiterhin aufzurufen.
 
Hm, also den Funktionsaufruf beende ich wohl mit "return" am Ende der jeweiligen Funktion, richtig?

Und du meinst, ich soll beide Timeout-Methoden in einer Variable speichern? Damit ich sie später mit Funktionsparametern voneinander unterschiedlich aufrufen kann?

Sorry, bin noch nicht so bewandert im Scripting, deshalb verstehe ich nicht ganz, worauf du hinauswillst ...

Gruß,
Micha
 
wenn du den geladenen zustand erreicht hast, d.h. opacity 100, dann musst darfst du nicht die Funktion nochmal aufrufen
einfach das setTimeout(...) in die letzte if-abfrage in den Else-Zweig (der noch nicht vorhanden ist)
flooo
 
Kann ich das nicht auch einfach so machen:

PHP:
function fadeIn(){
	document.getElementById("fadebereich").filters.alpha.opacity=a;
	a++;
	setTimeout("fadeIn()",100);
	if(a==100)
		return;
}
?

Micha
 
und das soll was bringen?
Erklärung:
du rufst einmal die Funktion fadeIn() auf, nehme ich an.
Code:
document.getElementById("fadebereich").filters.alpha.opacity=a;
Er setzt die opacity rauf
Code:
setTimeout("fadeIn()",100);
erneuter Aufruf der Funktion
Code:
    if(a==100) 
        return;
wenn a gleich 100 ist dann gib nichts zurück

Aber wenn a gleich 100 ist wurde die Funktion trotzdem erneut vorher aufgerufen. nächstes mal ist a gleich 101 und die funktion wird wieder aufgerufen. opacity = 101% ?
Daher machs wie von mir und Sven beschrieben
 
Hatte gestern 'n bisschen 'n Brett vor'm Kopf, deshalb wusste ich erst nicht wie du das gemeint hast mit dem setTimeout in den else-Zweig.
Heute ist das Brett weg und die Fades funktionieren auch. :-)

PHP:
function fadeIn(){
	document.getElementById("fadebereich").filters.alpha.opacity=a;
	a++;
	if(a==100)
		return;
	else
		setTimeout("fadeIn()",10);
}

Danke für die Hilfe!
Micha
 
Wenn das Problem damit gelöst ist, markiere den Thread bitte auch als erledigt.
 
Status
Nicht offen für weitere Antworten.

Neue Beiträge

Zurück