Frage

Ich entwickle eine Website mit nav Elementen, die die ganze Bühne von oben nach unten (siehe geändertes Bild unten) und es ist ziemlich einfach für den Benutzer decken die Bühne mit ihrer Maus zu verlassen, nicht der Auslösung der MouseEvent.MOUSE_OUT Ereignisse erforderlich ist, um " ausschalten“, sagte nav Elemente.

Soll ich Event.MOUSE_LEAVE verwenden zu erkennen, wenn die Maus die Bühne verlassen hat, und schalten Sie alle aktivierten nav Artikel? Das ist, was ich zu tun versucht, aber habe Mühe, eine Ausgabe von meinen Zuhörern hat. Irgendwelche Ideen?

alt text http://marcysutton.com/blog /wp-content/uploads/2010/01/redpropeller.png

Für eine Klasse mit einem Movieclip in der IDE Flash verbunden sind, ist dies die richtige Syntax für die Registrierung eines Event.MOUSE_LEAVE Zuhörer? Es scheint nicht, etwas zu tun, egal was ich tue. Ist es ein Fall, in dem ich den Film in einem Browser für das Ereignis einzubetten müssen Feuer?

this.stage.addEventListener(Event.MOUSE_LEAVE, mouseLeaveListener);

Hier ist meine MainNav.as 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
    }
}

}
War es hilfreich?

Lösung

Sie versuchen, den Ereignis-Listener für MOUSE_LEAVE im Konstruktor zu erstellen. Es ist möglich, dass die Stufe Objekt noch nicht existiert, wenn Mainnav auf die Bühne über eine Methode addChild () hinzugefügt wurde. Wenn Mainnav bereits auf der Bühne zur Entwurfszeit ist, dann ist es immer noch möglich, dass die Bühne nicht sofort verfügbar sein würde. Für Klassen, die von der Display (MovieClip-, Sprite, etc.) erben, muss ich nur noch eins im Konstruktor: Einrichten eines Event.ADDED_TO_STAGE Zuhörer. Dass Zuhörer lösen eine Methode init (), wenn das Objekt in die Anzeigestapelbühne über addChild () von einem übergeordneten Container, oder wenn das Objekt bereits auf der Bühne zur Entwurfszeit hinzugefügt wurde. Wenn meine Methode init () aufgerufen wird, weiß ich, dass die Bühne Eigenschaft zur Verfügung stehen wird.

In Ihrem Konstruktor Stufe existiert nicht in der Instanz noch, aber man sollte einen Laufzeitfehler erhalten. Allerdings verwenden Sie das ‚this‘ Schlüsselwort vor der Bühne. Wenn Sie ‚this‘ in einer Klasse, die von Object erbt (Klasse tut über MovieClip-> DisplayObject-> EventDispatcher-> Objekt), wird der Compiler nicht einen Fehler aus, wenn die Eigenschaft nicht existiert, weil es zu schaffen versucht, dass Eigenschaft als Mitglied von ‚this‘. Dies geschieht, weil die Objektklasse dynamisch ist, was bedeutet, dass neue Eigenschaften können, ohne sie als Klassenvariablen im Header zu erklären, die jederzeit erstellt werden - Sie müssen nur das ‚this‘ Schlüsselwort verwenden, wenn diese dynamische Eigenschaft. Wenn Sie this.stage verwenden, wenn die Stufe nicht die Klasse nicht vorhanden ist für Sie erstellt die Eigenschaft der Bühne. Dies ist jedoch nicht die Bühne Sie wollen, so wird der Hörer nur in ein leeres Objekt befestigt zu werden, der nichts tun. Versuchen Sie, dies ', wenn Referenzierung Bühne zu entfernen und ich bin sicher, dass Sie irgendwann den Fehler sehen werden. Im Allgemeinen ist es keine gute Praxis ‚dies‘ für Eigenschaften zu verwenden, da die Compiler Typfehler für diese Eigenschaft ignoriert.

Sie erwähnen in einem Kommentar über diesem MOUSE_LEAVE nicht in dem IDE nicht funktioniert, aber ich getestet dies von CS4 und es funktioniert. Sie können einen Unterschied in der Leistung aus dem IDE Flash Player verglichen werden Zeugen zu dem Flash-Player-Plugin des Browsers. In einigen Fällen Ihre Bühne werden Ereignis-Listener aus dem Konstruktor funktionieren, wenn die SWF lädt schnell und Bühne sofort verfügbar ist, aber es ist nicht zuverlässig. Verschieben Sie, dass Zuhörer auf eine init () -Methode, die nach dem ADDED_TO_STAGE Ereignis wird aufgerufen, und verwenden Sie nicht die ‚this‘ Schlüsselwort.

Andere Tipps

Antwort: Event.MOUSE_LEAVE nicht in der IDE abzufeuern. Es funktioniert gut, wenn der Film in einer HTML-Seite eingebettet ist. Vielen Dank für Ihre Hilfe!

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top