button =>problem mit fadeout

tantebootsy

Erfahrenes Mitglied
Hi,
ich habe einen mc gemacht, der über
_root.bt_button.onRollOver = function{ this.play();} einfadet und über
_root.bt_button.onRollOut = function{ this.play(15); ausfadet.
Wenn man nun den Mauszeiger darüber bewegt und zu schnell wieder wegbewegt -also während er noch am faden is- passieren ungewollte Effekte, wie dass der Button eingefadet is, obwohl man mit dem Zeiger gar nicht darauf ist und er ausfadet, wenn man darüber geht...
Wie kann ich sowas verhindern?
Zur Sicherheit is n Anhang dabei, dass ihr versteht was ich mein' (@Basileus :-) )
Danke schoma für die Hülfe!
Gruß,
TB
 

Anhänge

fade in flash....

hallo tb....

ich hab mir mal dein fla datei angeschaut... und wenn du den "play(15)" befehl mit "gotoAndPlay(16)" ersetzt dann sollte der fade effekt funktionieren....

Das Problem dabei ist, dass im Frame 16 der Button mit einem vollen Alpha Wert zu sehen ist und wenn man den Cursor vom Button wegbewegt und der fade effekt noch nicht zu ende war, entsteht wieder ein unschöner effekt

Deshalb solltest du vielleicht den Fade Effekt mit Actionscript machen.... hab dir ein beispiel drangehängt.... zur Orientierung...

ich hoffe es ist in etwa das, dass du suchst.... :)

saludos....
christoph
 

Anhänge

Hab mir schon gedacht dass das mit AS lösbar is, hätte ich so aber bestimmt nie hinbekommen. Ich tu mir da immernoch ziemlich schwer, selbst was zusammenzubauen..
Also Vielen Dank!

Jetzt komme ich zum nächsten Problem:
Ich habe nun mehrere Buttons, auf die ich diese zwei Funktionen, die du mir gebaut hast, anwenden möchte.
Eigentlich müsste ich den beiden Funktionen doch nur Namen geben wie z.B.

function fadein() {...};
function fadeout() {...};

und diese dann jedem Button zuweisen.
Dies habe ich so gemacht:

_root.bt_button.onRollOver = function() {
this.fadein();
};

Es funktioniert aber so nicht, kannst du mir da weiterhelfen, eigentlich stimmt der Code doch
Vielen Dank nochma,
TB
 
wenn du die Funktion in dieser Art aufrufst....

Code:
this.fadeein();

dann bezieht sich diese Funktion auf eine Klasse. In deinem Fall auf die Klasse [MovieClip] da ja dein Button die Eigenschaften eines Movieclips hat.

Aber ich nehme an, dass du zwei normale Funktionen geschrieben hast.

Es gibt jetzt zwei Möglichkeiten: (Die Beispiele beziehen sich nur auf FadeIn)

Die erste Variante
(Diese Variante wird als Funktion bezeichnet)

Code:
/*---------------------------------  Funktion ----------------------------*/
funtion fadeIn(clip) {                                          
	clip.onEnterFrame = function() {	          	
		this._alpha += 5;				
		if (Math.round(this._alpha) >= 100) {					delete this.onEnterFrame;				}
	}
}

/*------------------------------------ Code -----------------------------------*/

_root.bt_new.onRollOver = function() {			
                        fadeIn(this)                        
}

/*-------------------------------- Erklärung ----------------------------------*/
Die Funktion wird ganz normal eingeleitet nur wird in den Klammern noch eine Variable mitgegeben, in dem Fall [clip]. In dieser Variable ist der MovieClip sozusagen gespeichert.

Die Funktion wird dann im Code einfach mit [fadeIn(this)] aufgerufen.


Nun zur zweiten Variante
Diese Variante wird als "Methode" einer Klasse bezeichnet und ist schon ein Schritt in die objekt orientierte Programmierung.

Code:
/*------------------------------------------- Funktion -------------------------------------*/

MovieClip.prototype.fadeIn = function () {                          (1)
	this.onEnterFrame = function() {						this._alpha += 5;	
			
		if (Math.round(this._alpha) >= 100) {
			delete this.onEnterFrame;					}
	}
}


/*--------------------------------------- Code ---------------------------------------*/

_root.bt_new.onRollOver = function() {			
                       this. fadeIn();         
}

/*---------------------------------- Erklärung ---------------------------------*/
Zuerst wird mittels "Vererbung" eine weitere Funktion an die Klasse MovieClip (ist stantartmäßig in Flash integriert) angehängt (1).

Diese Funktion kann dann über die DOT-Syntax angesprochen werden [this.fadeIn();]


Wenn du Fragen hast zu den Beipielen, schreib einfach.... ich häng außerdem noch eine Beispiel Datei dran (mit Variante 2).....

saludos
christoph
 

Anhänge

Okay, hab inzwischen die erste Variante ausprobiert und sie hat auch geklappt, also vielen Dank erst Mal!
Ich muss mir das mit den Klassen noch durchlesen.. (hab mir n AS-Buch gekauft)so weit war ich noch nicht..
Ich hab halt so gedacht: der Button ist mein Objekt dem ich eine Methode zuweise, die fadeIn-Funktion, die ich vorher definiert habe. Und this verweist auf das Objekt, welchem die Funktion zugewiesen wurde, aber das war wohl falsch..
Hab aber auch gelesen: (O-Ton Buch) "..viele Neueinsteiger verwechseln die Klasse mit Funktion". Das ist mir wohl auch passiert.
Morgen is Freitag, also wünsch ich Dir schoma n guten Start ins WE ;-) !
TB
 
Zuletzt bearbeitet:
Zurück