Ich habe einen horizontalen Stapel von Schaltflächen, die Registerkarten darstellen, und jede Schaltfläche hat eine TextField
darin, die größer ist als die Abmessungen der Schaltfläche, so dass sie sich überlappen. Wie folgt aus (die gestrichelte Linie ist ein TextField
und die roten Feld ist der Bereich, in dem sich mousing über nicht funktionieren aufgrund der Überlappung):Wie behandeln Sie mouseover-Ereignisse mit überlappenden TextFields?
Jede dieser Tasten ist eine Instanz eines TabButton
, welches eine Klassendefinition wie folgt aus:
package src
{
import flash.display.MovieClip;
import flash.events.Event;
import flash.events.MouseEvent;
import flash.text.TextField;
public class TabButton extends MovieClip
{
// Stage Instances
public var mcHitZone:MovieClip;
public var mcText:TextField;
public function TabButton()
{
super();
addEventListener(Event.ADDED_TO_STAGE, onAddedToStage, false, 0, true);
}
private function onAddedToStage(e:Event):void
{
removeEventListener(Event.ADDED_TO_STAGE, onAddedToStage);
// Disable mouse input on everything except for the hit zone since that's where mouse handling should be done.
mcText.mouseEnabled = false;
mcHitZone.addEventListener(MouseEvent.ROLL_OVER, onMouse, false, 0, true);
}
private function onMouse(e:MouseEvent):void
{
trace("Mouse event: " + name + " " + e.type);
}
}
}
Jeder TabButton hat ein mcHitZone
, dass ich die Maus-Handler bin Befestigung, die die schwarze Fläche auf dem obigen Bild ist. Da die TextField
viel größer als die Schaltfläche selbst ist, muss sie für die Mauseingabe vollständig ignoriert werden. Daher deaktiviere ich sie mit mcText.mouseEnabled = false;
, was funktioniert, wenn man innerhalb einer einzelnen Taste mausert, aber wenn man über den Überlappungsbereich fährt (die rote Box) die TextField
wird Mauseingabe von der anderen Taste blockieren.
Gibt es eine Möglichkeit, dies funktioniert so, dass die TextField
Mauseingabe auf nichts, mit dem es überlappt blockiert?
Ich habe die FLA und AS hochgeladen, die ich mit here getestet habe. Wenn Sie es ausführen, wird es nachverfolgen, wenn Sie eine bestimmte Schaltfläche durchlaufen. Wenn Sie versuchen, mit der Maus über den roten Bereich der Schaltfläche ganz links zu fahren, funktioniert das nicht.
Die Frage ist: Warum überlappt Ihr Textfeld? Wenn Sie diesen Leerraum nicht benötigen, entfernen Sie ihn einfach und das Problem verschwindet! – akmozo
Ich habe leider keine Wahl. Ich kann nicht ins Detail gehen, aber das Textfeld muss einfach so sein. Dies ist ein stark vereinfachtes Beispiel für die tatsächlichen Bibliotheken, die ich verwende. – Shenjoku