24.10.2008 AKTUELL // FLASH
GESCHRIEBEN VON ALEXANDERS

Mittels der startDrag() und stopDrag() Funktionalität lassen sich in Flash einfach Slider realisieren. Alle notwendigen Berechnungen werden damit von Flash bereitgestellt und ausgeführt. Der Entwickler muss nur den Startpunkt und der Bereich zum Draggen definieren.

Was ist aber nun, wenn der User einen Slider bedienen soll, der recht schmal ist? Hier kann es mit hoher Wahrscheinlichkeit passieren, dass der User während der Mausbewegung den Bereich des SWFs verlässt. Dann wird der DragEvent nicht weiter außgeführt, da der Slider den Fokus verliert. Das heißt der Slider bleibt stehen und auch der MouseUp-Event wird nicht mehr behandelt. Es erfolgt keine Reaktion mehr von Flash.

Eine Variante wäre es die Mausposition mit JavaScript auszulesen und über ExternalInterface an Flash zu übermitteln. Das funktioniert aber von Browser zu Browser unterschiedlich und ist einigen Beschränkungen unterworfen.

Also ist die Lösung wieder in Flash zu suchen und dese ist eigentlich recht einfach. Man fügt der Stage einen MOUSE_MOVE Listener hinzu und steuert hierüber die Drag and Drop Funktionalität. Das ist in diesem Punkt etwas aufwändiger als die Verwendung der oben beschriebenen Funktionen. Jedoch hat diese Methode einen entscheidenden Vorteil: Führt der User nun einen MOUSE_DOWN auf dem Slider aus und beginnt den Dragging-Prozess, wird der Fokus auf dem SWF gehalten. Das bedeutet der MOUSE_MOVE Event wird auch außerhalb des SWFs, sogar auf dem gesamten Monitor der Users, ausgeführt. Darüber kann nun der Dragging-Prozess fortgeführt werden, was die Nutzbarkeit für den User in großem Maße steigert. Zudem ist diese Variante Browser und OS-unabhängig, was die Entwicklungszeit wiederum reduziert.

2 Beiträge zu "Flash Drag and Drop auch außerhalb der Bühne"
Alexander sagt:
20 Nov 2009
Hallo Nils Huh, schwer zu sagen, woran das hängt. Es kann an vielem liegen. Gerade ohne Code ist das echt nicht ohne. Aber ich kann dir auf jeden Fall versichern, dass die Technik geht. Und zwar haben wir sie auf www.swu.de verwendet für den Silder oben. Schau es dir einfach mal an. Hast du noch immer dann ein startDrag() bei dir drin? Ich frage wegen der bound area. Die braucht man eigentlich bei dieser Variante nicht (zumindest nicht per Rectangle wie bei der klassischen Variante). Vielmehr hängt man die Position an die aktuelle Mausposition ran. Grüße Alex
Nils Biesalski sagt:
20 Nov 2009
Betreff: flash drag und drop auch ausserhalb der bühne Hallo, ich habe das gerade wie beschrieben versucht allerdings bricht der drag ab sobald ich die Stage verlasse, habe den EventListener mit stage.addEventListener angemeldet, wenn ich aus dem browser efnster oder flash player rausgehe ist ende mit drag und beim reenter springt das drag object irgendwo in die bound area.
Lass uns Deine Meinung wissen