| Frameübergreifende Steuerung eines Flash Movies mit JS | ||||||||||||||||||||||||||
|
|
|
|||||||||||||||||||||||||
Einleitung
Einführende
Erklärung
![]()
Zu allererst möchte ich folgendes festhalten: Dieses Script stammt nicht
von mir! Es wurde als JavaScript Demo von Macromedia auf der Flash4 CD (im Verzeichnis
\Goodies\Macromedia\JavaScript Demo) beigelegt. Da für dieses Script keine
Dokumentation vorhanden war, habe ich versucht eine solche zu erstellen.![]()
![]()
Wozu braucht man diese
Art von Steuerung?
![]()
Diese Art von Steuerung benötigt man sobald mehr als ein Frame benutzt
wird, und durch eine Aktion im ersten Frame ein Flash Movie im zweiten Frame
gesteuert werden soll.
Um diese Problematik zu veranschaulichen folgendes kleines Beispiel:
Man hat eine HTML Seite bestehend aus zwei Frames. Im Frame "links"
ist eine einfache Menüsteuerung, im Frame "rechts" ein kleiner
Flash Film. So, nun steht man vor genau diesem Problem. Ich möchte durch
eine Aktion im linken Frame eine Aktion im rechten Frame auslösen - z.B.
eine Animation stoppen oder starten.![]()
![]()
Worin liegen die
Probleme?
![]()
Es treten folgende zwei Probleme auf:
1. Man muss durch eine Aktion im linken Frame den Shockwaveplayer, der das Movie
im rechten Frame abspielt, das gewünschte Kommando mitteilen.
2. Das zweite Problem ist allerdings viel schwieriger zu bewältigen. Es
ist nähmlich das allseits unbeliebte Problem der Browserinkompatibilität.
Wie bei vielen anderen Problemen auch, ist hieran nur der Umstand schuld dass
die Browser der verschiedenen Softwarehäuser nicht die gleiche Syntax benutzen
um die gleichen Aktionen auszuführen!
![]()
Bekannte Schwächen
dieses Scriptes
![]()
Wenn das Script wie folgend beschrieben verwendet wird, ist es nach meiner Erfahrung
nach mit allen wichtigen Browsern kompatibel. Die große Ausnahme ist die
Kombination Mac und Internet Explorer - hier will dieses Script seinen Dienst
nicht vollbringen.
![]()
Syntax zur Steuerung
des Shockwaveplayers
![]()
Für Internet Explorer:
document.framename.flashfilename.actionFür Netscape:
document.framename.document.embeds[0].action
Steuerung mit einer Flash/HTML
Navigation
Schauen wir uns einfach einmal ein kleines
Beispiel an. Und hier kannst du es downloaden.
Das Script
![]()
Dieses Script sollte im Head Bereich des Dokumentes stehen indem man die Steuerung
des Flash Movies vornimmt.
<SCRIPT LANGUAGE="JavaScript">
var InternetExplorer = navigator.appName.indexOf("Microsoft") != -1;
function stuff(s)
{
document.msgForm.message.value = s;
}
</script>
WICHTIG: Auf Groß und Kleinschreibung achten!
![]()
Der Flashfilm
![]()
Wichtig ist auch, dass folgende EMBED und OJECT Tags beim laden des Flash-Movies
angegeben sind:
<object id="flashfilename"> <param name="swLiveConnect" value="true"> <embed name="flashfilename" swliveconnect=true> </embed>in diesem Beispiel sieht das so aus:
<object id="film"> <param name="swLiveConnect" value="true"> <embed name="film" swliveconnect=true> </embed>Die HTML Steuerung
<a href='javascript:var m = InternetExplorer ? parent.framename.flashfilename : parent.framename.document.embeds[0]; m.action'>TEXT</a>
So, jetzt muss man nur noch die richtigen Parameter in diesen HTML-Code einsetzen.
Da wären:
framename: Der Name des Frames, indem der anzusprechende Flashfilm läuft
flashfilename: Der Name des anzusprechenden Flashfilms.
action: Die auszuführende Aktion. Eine Liste der verschiedenen Möglichkeiten
findest du etwas weiter unten.
TEXT: Das ist natürlich allseits bekannt, hier kommt die Linkbezeichnung
rein - standard HTML.
In diesem Beispiel sieht das so aus:
<a href='javascript:var m = InternetExplorer ? parent.rechts.film : parent.rechts.document.embeds[0]; m.GotoFrame(1)'>Frame 1</a>
<a href='javascript:var m = InternetExplorer ? parent.rechts.film : parent.rechts.document.embeds[0]; m.GotoFrame(11)'>Frame 11</a>
<a href='javascript:var m = InternetExplorer ? parent.rechts.film : parent.rechts.document.embeds[0]; m.TStopPlay("_flash0/linie")'>Stop</a>
<a href='javascript:var m = InternetExplorer ? parent.rechts.film : parent.rechts.document.embeds[0]; m.TPlay("_flash0/linie")'>Play</a>
Die Flash Steuerung
![]()
Meistens wird es allerdings erforderlich sein das Menü ebenfalls in Flash
zu gestalten - Es muss ja nicht unbedingt ein richtiges Menü sein, es könnten
ja auch zwei interaktive Filme sein - Da ist ja soooooo viel möglich!
Im Prinzip ist auch nicht viel Unterschied zur HTML Variante vorhanden. Die
JavaScript Anweisung wird in eine Get URL Aktion verpackt - und das war es schon.
Noch einmal die benutzten Parameter:
framename: Der Name des Frames, indem der anzusprechende Flashfilm läuft
flashfilename: Der Name des anzusprechenden Flashfilms.
action: Die auszuführende Aktion. Eine Liste der verschiedenen Möglichkeiten
findest du etwas weiter unten.
Die Action Script Anweisung in Flash 4:
On (press)
Get URL ("javascript:var m = InternetExplorer ? parent.framename.flashfilename : parent.framename.document.embeds[0]; m.action")
End On
In diesem Beispiel sieht das so aus:
On (press)
("javascript:var m = InternetExplorer ? parent.rechts.film : parent.rechts.document.embeds[0]; m.GotoFrame(1)")
End On
On (press)
("javascript:var m = InternetExplorer ? parent.rechts.film : parent.rechts.document.embeds[0]; m.GotoFrame(11)")
End On
On (press)
("javascript:var m = InternetExplorer ? parent.rechts.film : parent.rechts.document.embeds[0]; m.TStopPlay("_flash0/linie")")
End On
On (press)
("javascript:var m = InternetExplorer ? parent.rechts.film : parent.rechts.document.embeds[0]; m.TPlay("_flash0/linie")")
End On
Die Action Script Anweisung in Flash 5:
on (press) {
getURL ("javascript:var m = InternetExplorer ? parent.framename.flashfilmname : parent.framename.document.embeds[0]; m.action");
}
In diesem Beispiel sieht das so aus:
on (press) {
getURL ("javascript:var m = InternetExplorer ? parent.rechts.film : parent.rechts.document.embeds[0]; m.GotoFrame(1)");
}
on (press) {
getURL ("javascript:var m = InternetExplorer ? parent.rechts.film : parent.rechts.document.embeds[0]; m.GotoFrame(11)");
}
on (press) {
getURL ("javascript:var m = InternetExplorer ? parent.rechts.film : parent.rechts.document.embeds[0]; m.TStopPlay(\"_flash0/linie\")");
}
on (press) {
getURL ("javascript:var m = InternetExplorer ? parent.rechts.film : parent.rechts.document.embeds[0]; m.TPlay(\"_flash0/linie\")");
}
WICHTIG: In Beiden Fällen darf man nicht vergessen das benötigte JavaScript einzubauen (im Head-Bereich der dazugehörigen HTML Seite)!
Macromedias JavaScript Demo
Es gibt sehr viele verschiedene Möglichkeiten wie der Parameter "action"
aussehen kann. Man kann nicht nur das Hauptmovie steuern, sondern auch die in
diesem Movie eingebauten Ebenen und Instanzen.
Eine gute Möglichkeit den Einsatz dieser verschiedenen Steuermöglichkeiten
zu sehen, ist das von
Macromedia mitgelieferte "JavaScript Demo" auszuprobieren. Ihr
findet es auf eurer "Flash4" CD im Verzeichnis "\Goodies\Macromedia\JavaScript
Demo" - oder Ihr könnt es auch hier
downloaden.
Liste der verwendeten
Anweisungen
![]()
Zur Steuerung der Instranz "flying bird":
framename = fw_map
flashfilename = map
Instanzname = bird
javascript:var m = InternetExplorer ? parent.fw_map.map : parent.fw_map.document.embeds[0]; m.TStopPlay("_flash0/bird")
javascript:var m = InternetExplorer ? parent.fw_map.map : parent.fw_map.document.embeds[0]; m.TPlay("_flash0/bird")
javascript:var m = InternetExplorer ? parent.fw_map.map : parent.fw_map.document.embeds[0]; m.TGotoFrame("_flash0/bird", 1)
javascript:var m = InternetExplorer ? parent.fw_map.map : parent.fw_map.document.embeds[0]; m.TGotoFrame("_flash0/bird", 3)
javascript:var m = InternetExplorer ? parent.fw_map.map : parent.fw_map.document.embeds[0]; m.TGotoFrame("_flash0/bird", m.TCurrentFrame("_flash0/bird")+1)
javascript:var m = InternetExplorer ? parent.fw_map.map : parent.fw_map.document.embeds[0]; m.TGotoFrame("_flash0/bird", m.TCurrentFrame("_flash0/bird")-1)
Das Ganze geht natürlich auch noch etwas komplexer. Man verwendet einfach
mehrere Labels und Instanzen:javascript:var m = InternetExplorer ? parent.fw_map.map : parent.fw_map.document.embeds[0]; m.LoadMovie(1, "loop.swf")
javascript:var m = InternetExplorer ? parent.fw_map.map : parent.fw_map.document.embeds[0]; m.LoadMovie(1, "")
javascript:var m = InternetExplorer ? parent.fw_map.map : parent.fw_map.document.embeds[0]; m.TPlay("_flash1")
javascript:var m = InternetExplorer ? parent.fw_map.map : parent.fw_map.document.embeds[0]; m.TStopPlay("_flash1")
javascript:var m = InternetExplorer ? parent.fw_map.map : parent.fw_map.document.embeds[0]; m.TGotoLabel("_flash1", "part 1")
javascript:var m = InternetExplorer ? parent.fw_map.map : parent.fw_map.document.embeds[0]; m.TGotoLabel("_flash1", "part 2")
javascript:var m = InternetExplorer ? parent.fw_map.map : parent.fw_map.document.embeds[0]; m.TGotoLabel("_flash1", "part 3")
javascript:var m = InternetExplorer ? parent.fw_map.map : parent.fw_map.document.embeds[0]; m.TGotoLabel("_flash1", "part 4")
javascript:var m = InternetExplorer ? parent.fw_map.map : parent.fw_map.document.embeds[0]; m.TGotoFrame("_flash1", m.TCurrentFrame("_flash1")+1)
javascript:var m = InternetExplorer ? parent.fw_map.map : parent.fw_map.document.embeds[0]; m.TGotoFrame("_flash1", m.TCurrentFrame("_flash1")-1)
javascript:var m = InternetExplorer ? parent.fw_map.map : parent.fw_map.document.embeds[0]; stuff(m.TCurrentLabel("_flash1"))
javascript:var m = InternetExplorer ? parent.fw_map.map : parent.fw_map.document.embeds[0]; stuff(m.TCurrentFrame("_flash1"))
Auflistung
einiger Actions
![]()
Eine kurze Zusammenfassung der oben verwendeten Actions:
|
Syntax |
Beispiel |
Beschreibung |
|
LoadMovie(MovieNummer,"MovieName.swf") |
LoadMovie(1,"loop.swf") |
lädt movie "loop.swf"
auf Ebene 1 nach löscht den movie auf Ebene 1 |
|
TGotoFrame("welchesMovie",Ziel) |
TGotoFrame("_flash0",50) |
geht zu Frame 50, Ebene 0 geht zu Frame 2, Ebene 0, Instanzname "bird" geht zu Frame 100, Ebene 1 |
|
TGotoLabel("welchesMovie","welcherLabel") |
TGotoLabel("_flash1","part3") |
geht zu Label "part3" auf Ebene 1 |
|
TPlay("welchesMovie") |
TPlay("_flash1") |
spielt das movie auf Ebene
1 weiter ab spielt das movie auf Ebene 0 und Instanzname "bird" weiter ab |
|
TStopPlay("welchesMovie") |
TStopPlay("_flash1") |
stoppt das Abspielen des
movies auf Ebene 1 stoppt das Abspielen des movies auf Ebene 0, Instanzname "bird" |
Beispielliste
Anwendungen dieses
Scripts
![]()
Hier möchte ich Euch einige praktische Anwendungen zeigen. Ihr seht hier
vorallem die typische Anwendung dieses Scriptes: Menü steuert Hauptfilm
oder Hauptmenü steuert Untermenü.
| Link | Beschreibung | Autor |
|
Hauptmenü (links) steuert Untermenü (oben) |
Markus
Dübbert ZS - Communication |
|
| www.cominto.de | Sitemap (rechts) steuert Navigation (links). | com.in.to gmbh |
| www.ee-consultants.de | HTML Seite (oben) steuert Menü (unten). | Wolf-Ludwig
Kummetz MM-Abteilung der E&E information consultants AG |
|
Menü (links) steuert Hauptfilm (rechts) |
Daniela
Schulz nunet solutions |
|
|
Hauptmenü (oben) steuert Untermenü (links) |
Andreas Kurtz |