| |||||||
Du magst keine Werbung? Wir auch nicht!
Einfach registrieren und die Werbung ist weg. Diese Nachricht sehen nur nicht registrierte Nutzer.
![]() |
| | LinkBack | Themen-Optionen | Ansicht |
| | #1 (permalink) |
| [+] Registriert seit: Dec 2002 Ort: cologne
Beiträge: 2.271
| [stuff] SimpleMouseEventHandler
Trotzdem Bubbling und Co vermisse ich einige Events aus alten Zeiten und brauche sie auch. Um nicht jedesmal Einzellösungen zu fabrizieren habe ich eine schlanke Klasse aufgesetzt, die alle 'alten' Events 'emuliert'. Dabei wird der Focus ebenso beachtet, wie der Zustand der stage Referenz im InteractiveObject. Sourcecode mit Beispiel liegt unten bei. Anmelden: Code: SimpleMouseEventHandler.register( target ); Code: SimpleMouseEventHandler.unregister( target ); Code: package de.popforge.events
{
import flash.display.InteractiveObject;
import flash.events.MouseEvent;
import flash.utils.Dictionary;
import flash.display.Stage;
public class SimpleMouseEventHandler
{
static public function register( target: InteractiveObject, trackAsMenu: Boolean = false ): void
{
new SimpleMouseEventHandler( target, trackAsMenu );
}
static public function unregister( target: InteractiveObject ): void
{
SimpleMouseEventHandler( table[ target ] ).dispose();
delete table[ target ];
}
static private const table: Dictionary = new Dictionary( true );
//-- target must have set buttonMode = true
private var target: InteractiveObject;
private var trackAsMenu: Boolean;
public function SimpleMouseEventHandler( target: InteractiveObject, trackAsMenu: Boolean )
{
this.target = target;
this.trackAsMenu = trackAsMenu;
init();
}
private function init(): void
{
target.addEventListener( MouseEvent.MOUSE_OVER, onTargetMouseOver );
target.addEventListener( MouseEvent.MOUSE_OUT, onTargetMouseOut );
target.addEventListener( MouseEvent.MOUSE_DOWN, onTargetMouseDown );
target.addEventListener( MouseEvent.MOUSE_UP, onTargetMouseUp );
table[ target ] = this;
}
private function dispose(): void
{
target.removeEventListener( MouseEvent.MOUSE_OVER, onTargetMouseOver );
target.removeEventListener( MouseEvent.MOUSE_OUT, onTargetMouseOut );
target.removeEventListener( MouseEvent.MOUSE_DOWN, onTargetMouseDown );
target.removeEventListener( MouseEvent.MOUSE_UP, onTargetMouseUp );
}
private function onTargetMouseOver( event: MouseEvent ): void
{
if( event.buttonDown )
{
if( target.stage.focus == target || trackAsMenu )
dispatch( SimpleMouseEvent.DRAG_OVER );
}
else
{
dispatch( SimpleMouseEvent.ROLL_OVER );
}
}
private function onTargetMouseOut( event: MouseEvent ): void
{
if( event.buttonDown )
{
if( target.stage != null )
{
if( target.stage.focus == target || trackAsMenu )
dispatch( SimpleMouseEvent.DRAG_OUT );
}
}
else
{
dispatch( SimpleMouseEvent.ROLL_OUT );
}
}
private function onTargetMouseDown( event: MouseEvent ): void
{
dispatch( SimpleMouseEvent.PRESS );
target.stage.addEventListener( MouseEvent.MOUSE_UP, onStageMouseUp );
}
private function onTargetMouseUp( event: MouseEvent ): void
{
if( target.stage.focus == target )
dispatch( SimpleMouseEvent.RELEASE );
target.stage.removeEventListener( MouseEvent.MOUSE_UP, onStageMouseUp );
}
private function onStageMouseUp( event: MouseEvent ): void
{
dispatch( SimpleMouseEvent.RELEASE_OUTSIDE );
Stage( event.currentTarget ).removeEventListener( MouseEvent.MOUSE_UP, onStageMouseUp );
}
private function dispatch( type: String ): void
{
target.dispatchEvent( new SimpleMouseEvent( type ) );
}
}
} Geändert von André Michelle (21-05-2007 um 19:57 Uhr) |
| | |
| | #2 (permalink) |
| Neuer User Registriert seit: Jan 2004
Beiträge: 29
| Danke
Hallo Andrè Ich weiß der Thread ist alt, aber trotzdem DANKE. Besonders für Scrollbars ist ein "RELEASE_OUTSIDE" ein Segen. Ich habe es gerade mit diesem Scrollscript probiert und es läuft mit wenigen Änderungen Klasse. http://www.kirupa.com/forum/showthread.php?p=2225562 Scrollbares Textfeld ohne Componets in beliebiger Anzahl(Instanzen)
__________________ Tschüss Thomas |
| | |
| | #3 (permalink) |
| Der Wunderhund Registriert seit: Jun 2002 Ort: Hattingen
Beiträge: 10.515
|
Danke auch von meiner Seite nochmals für diese kleine aber feine Klasse. Gerade als Neueinsteiger in AS3 ist das »Fehlen« einiger elementaren Events anfangs doch recht ungewohnt. Aber diese Klasse hilft sehr. ![]() Warum ist diese Klasse eigentlich nicht im Stuff-Bereich? gruß, gaspode |
| | |
![]() |
| Lesezeichen |
| Themen-Optionen | |
| Ansicht | |
| |