Zurück   Flashforum > Flash > Stuff

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 21-05-2007, 19:15   #1 (permalink)
[+]
 
Benutzerbild von André Michelle
 
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 );
Abmelden:
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 ) );
		}
	}
}
Angehängte Dateien
Dateityp: zip SimpleMouseEvents.zip (19,2 KB, 128x aufgerufen)
__________________
aM

blog | laboratory | tonfall | processing

Audiotool.com

Geändert von André Michelle (21-05-2007 um 19:57 Uhr)
André Michelle ist offline   Mit Zitat antworten
Alt 18-10-2007, 21:31   #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
landschaf ist offline   Mit Zitat antworten
Alt 27-11-2007, 19:24   #3 (permalink)
Der Wunderhund
 
Benutzerbild von gaspode
 
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
gaspode ist offline   Mit Zitat antworten
Alt 30-11-2007, 19:28   #4 (permalink)
[+]
 
Benutzerbild von André Michelle
 
Registriert seit: Dec 2002
Ort: cologne
Beiträge: 2.271
Zitat:
Warum ist diese Klasse eigentlich nicht im Stuff-Bereich?
Stimmt
__________________
aM

blog | laboratory | tonfall | processing

Audiotool.com
André Michelle ist offline   Mit Zitat antworten
Alt 27-12-2007, 07:43   #5 (permalink)
infected
 
Benutzerbild von ZuiOpO_x
 
Registriert seit: Feb 2002
Ort: Hamburg
Beiträge: 487
cooooool! danke! genau sowas hab ich gesucht.
__________________
eyermannlogic
(!)
ZuiOpO_x ist offline   Mit Zitat antworten
Alt 27-12-2007, 11:19   #6 (permalink)
x39
 
Benutzerbild von georgem
 
Registriert seit: Oct 2004
Ort: St.Gallen, Schweiz
Beiträge: 1.261
Yep DANKE!, ich werde es heute mal austesten! :-)
__________________
The Sleeper Must Awaken

www.margaris.de | www.exosolar.net
georgem ist offline   Mit Zitat antworten
Alt 10-02-2008, 21:39   #7 (permalink)
Neuer User
 
Registriert seit: Jan 2007
Beiträge: 7
Super Danke. Das ist ganau das was ich gesucht habe!
JohannesX ist offline   Mit Zitat antworten
Antwort

Lesezeichen

Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks sind an
Pingbacks sind an
Refbacks sind an



Alle Zeitangaben in WEZ +1. Es ist jetzt 18:38 Uhr.

Domains, Webhosting & Vserver von Host Europe
Unterstützt das Flashforum!
Adobe User Group


Copyright ©1999 – 2012 Marc Thiele