AS3: MOUSE_OUT nicht feuern, wenn sich der Mauszeiger verlässt die Bühne
Ich entwickle eine website mit nav-Elemente bedecken die ganze Bühne, von oben nach unten (siehe geänderte Bild unten) und es ist ziemlich einfach für den Benutzer zum verlassen der Bühne mit Ihrer Maus, ohne die Auslösung der MouseEvent.MOUSE_OUT
Veranstaltungen erforderlich, um "abzuschalten", sagte nav-Elemente.
Soll ich mich mit Event.MOUSE_LEAVE
zu erkennen, wenn die Maus die Bühne verlassen hat, und schalten Sie alle aktiviert nav-Elemente? Das ist das, was ich versucht zu tun, aber hatten Probleme, bekomme keine Ausgabe von meinem Zuhörer. Irgendwelche Ideen?
alt-text http://marcysutton.com/blog/wp-content/uploads/2010/01/redpropeller.png
Klasse, verbunden mit einem movieclip in der Flash-IDE, ist dies die richtige syntax für die Registrierung einer Event.MOUSE_LEAVE
Zuhörer? Es scheint nicht, irgendetwas zu tun, egal, was ich Tue. Ist es ein Fall, wo ich das einbetten des Films in einem browser an, dass das Ereignis ausgelöst?
this.stage.addEventListener(Event.MOUSE_LEAVE, mouseLeaveListener);
Hier ist mein MainNav.Klasse:
package com.redpropeller {
import com.greensock.*;
import com.greensock.plugins.*;
import flash.display.*;
import flash.text.*;
import flash.events.*;
public class MainNav extends MovieClip { //MainNav is a movieclip in the IDE
public var colors:Array;
public function MainNav():void {
colors = new Array(0xee3124, 0xc72a1f, 0xa62c24, 0x912923, 0x7e221c);
TweenPlugin.activate([TintPlugin]);
//trying to target stage through this object
this.stage.addEventListener(Event.MOUSE_LEAVE, mouseLeaveListener);
for(var i:Number=0; i<this.numChildren; i++){
var n = this.getChildAt(i);
n.useHandCursor = true;
n.buttonMode = true;
n.addEventListener(MouseEvent.MOUSE_OVER, navBtnOn);
n.addEventListener(MouseEvent.MOUSE_OUT, navBtnOff);
}
}
public function mouseLeaveListener(e:Event):void {
trace('mouseleave'); //nothing ever happens
}
private function navBtnOn(e:MouseEvent):void {
TweenLite.to(e.currentTarget.bar_mc, 0.01, {tint:0x333333});
}
private function navBtnOff(e:MouseEvent):void {
TweenLite.to(e.currentTarget.bar_mc, 0.01,
{tint:uint(colors[this.getChildIndex(MovieClip(e.currentTarget))])});
//changes color back to specific tint
}
}
}
- was ist mit Grafik? hat Ihr hosting-service wieder ein paar zufällige Foto?
- Ich fühlte mich seltsam, über die Buchung der tatsächlichen Ausführung vor Ort gestartet hatte.... ersetzt mit einer besseren Grafik.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Sie versuchen, erstellen Sie den Ereignis-listener für MOUSE_LEAVE in den Konstruktor. Es ist möglich, dass das stage-Objekt existiert noch nicht, wenn MainNav nicht Hinzugefügt wurde die Bühne über eine addChild () - Methode. Wenn MainNav ist bereits auf der Bühne zur design-Zeit, es ist immer noch möglich, die Bühne würde nicht sofort verfügbar sein. Für die Klassen Erben von der DisplayObject - (MovieClip, Sprite -, etc.), Ich Tue nur eine Sache auf der Konstruktor: eine Veranstaltung einrichten.ADDED_TO_STAGE Zuhörer. Dieser listener wird eine init () - Methode, wenn das Objekt Hinzugefügt wurde, auf die Bühne-display-stack über addChild () - aus einem übergeordneten container, oder wenn das Objekt bereits auf der Bühne zur design-Zeit. Wenn meine init() Methode aufgerufen wird, weiß ich, dass die stage-Eigenschaft verfügbar sein wird.
In Ihrem Konstruktor, Stufe existiert nicht in der Instanz noch nicht, aber sollten Sie einen Laufzeitfehler erhalten. Allerdings bist du mit dem "this" - Schlüsselwort vor der Bühne. Wenn Sie 'dies' in einer Klasse erbt von Object (Ihre Klasse über MovieClip - ->DisplayObject->EventDispatcher - ->Objekt), der compiler nicht einen Fehler auslösen, wenn die Eigenschaft nicht vorhanden ist, weil es versucht, zu erstellen, die Eigenschaft als Mitglied "dieser". Dies geschieht, weil die Object-Klasse ist dynamisch, was bedeutet, dass neue Eigenschaften können jederzeit erstellt werden, ohne zu erklären, wie Klasse die Variablen in der Kopfzeile -- Sie müssen nur die Verwendung der "this" - Schlüsselwort beim verwenden, dass die dynamische Eigenschaft. Wenn Sie diesen verwenden.Bühne, wenn die Bühne nicht vorhanden ist die Klasse erstellt, die Eigentum der Bühne für Sie. Dies ist jedoch nicht die Bühne, die Sie wollen, so dass der Zuhörer nur immer angebracht, um ein leeres Objekt, das nicht nichts tun. Versuchen Sie 'dies' beim verweisen auf die Bühne und ich bin sicher, du wirst sehen der Fehler an einem gewissen Punkt. Im Allgemeinen ist es keine gute übung zur Verwendung von 'dieser' für Eigenschaften, da der compiler ignoriert Fehler für diese Eigenschaft.
Erwähnst du in einem Kommentar oben, dass MOUSE_LEAVE funktioniert nicht in der IDE, aber getestet habe ich diese von CS4 und es funktioniert. Sie können Zeuge werden, ein performance-Unterschied von der IDE-Flash-Player im Vergleich zu den browser-Flash-Player-plugin. In einigen Fällen kann Ihr stage-Ereignis-listener wird die Arbeit vom Konstruktor wenn die SWF-Datei schnell lädt und die Bühne ist sofort verfügbar, aber es ist nicht zuverlässig. Bewegen, die Zuhörer auf eine init () - Methode, die aufgerufen wird, nachdem die ADDED_TO_STAGE event und nicht die Verwendung der "this" - Schlüsselwort.
Antwort: Event.MOUSE_LEAVE nicht Feuer in der IDE. Es funktioniert gut, wenn die Film ist eingebettet in eine HTML-Seite. Vielen Dank für Ihre Hilfe!