D0303041 「別フレームのムービーを制御する方法」分かりました(^^;
Name 憲ちゃん
Date 2003年03月04日 (火) 01時17分
Message Amazon.co.jpサイト販売の「FLASH SERVER-SIDE SCRIPT SAMPLES」という本で説明されている
Flashムービーサンプルを公開しているサイトを見つけました(^^g/~~
そこの「JavaScript」>「2.JavaScriptを使ったFlashムービーの操作」の中に・・・
『フレームをはさんだ制御』というのがあり、
これが正にこれまで、いろいろな方からご質問があったにもかかわらず、
憲ちゃんが分からなかったものそのものでした(;^_^Aアセアセ・・・
できるのですねぇ(^^;
サンプルムービーだけなので、詳しい解説は3,200円で本を購入しないとわからないのですが、
核心部分は、メニューswfを埋め込んだHTMLファイルに書かれたJavaScriptですから、
それはサンプルページのソースを見れば借用できますよネ(笑)
そこ書かれていたスクリプトは・・・

 <script language="JavaScript" type="text/JavaScript">
 <!--

 function gotoFrame( label )
 {
    var movie = getFlashObj( parent.main.document, "movie" );
    if( movie != null )
    {
        movie.TGotoLabel( "/", label );
        movie.Play();
    }
 }

 function getFlashObj( doc, name )
 {
    if( document.all )
        return doc.all[ name ];
    else if( document.layers )
    {
    return doc[ name ];
    }
    else
    return null;
 }

 //-->
 </script>

どういう意味のことを書いてあるかお知りになりたい方は、是非本をご購入いただくとして、
ここでは、理屈抜きでこれを活用させていただくことにします(笑)
スクリプトの中で留意するところは、太字の部分!!
gotoFrame( label )
 ここが同じHTML内に配置された「menu用」のFLASHムービーとの接点です。
FLASH側からJavaScriptのメソッドを呼び出す方法は幾つかありますが、例えば・・・
ボタンクリックで、
 on(release){
   getURL(”JavaScript:gotoFrame(’具体のラベル名’)”,”_self”);
 }
「具体のラベル名」というのは、
mainという名前【※1】のフレームにあるHTMLファイルの、
movieという識別名【※2】をもつFLASHムービー(swf)の中の「フレームラベル」を指します。

ということでフレームやファイルの構成ですが・・・

@「index.htm」でフレームを左右に分割、それぞれ「menu」「main」というフレーム名を付けます。
mainフレームにコンテンツ表示用のswfを配置するので、
この名前とJavaScriptの【※1】の名前と一致させます。
A「menu.htm(左menuフレーム)」の<HEAD>〜</HEAD>の中に上記JavaScriptを記載するとともに、
<BODY>以下に、メニュー用swf「menu.swf」埋め込みタグを普通に記載。
B「main.htm(右mainフレーム)」の<BODY>以下に「main.swf」埋め込みタグを記載。
その際、【※2】のムービー識別名を必ず記載します。(通常の場合は省略可)
 <OBJECT ・・・WIDTH=400 HEIGHT=400 ID="movie"
  <PARAM NAME=movie VALUE="main.swf">
  <PARAM NAME=quality VALUE=high>
  ・・・・・・・・・・・・・・・・・
  <EMBED src="main.swf" quality=high ・・・WIDTH=400 HEIGHT=400 name="movie"
  </EMBED>
 </OBJECT>
C「menu.swf」にはメニューボタンを配し、上記JavaScriptの「function関数」で定義された
メソッド名(この場合は”gotoFrame(変数label)”)を呼び出します。
「変数label」には、以下D「main.swf」内で設定するフレームラベル名を具体的に記載します。
 on (release) {
   getURL ("JavaScript:gotoFrame('flash2');", "_self");
 }
※ここの”flash2”が「main.swf」内の具体のラベル名です。
D「main.swf」、「menu.swf」のボタン操作によって制御されるコンテンツ用ムービー。

例えば、こんな感じで、ラベルレイヤーにそれぞれ「top」「flash1」「flash2」という
フレームラベルを付けています。

※サンプルはココをクリックしてください(^^)
単に、左のメニュームービーのボタンで右フレームのコンテンツムービーを制御するだけのことなら、
何もこんな面倒なことをしなくても、左右一体のムービーにするほうが動きもスムーズです。
特にネットスケープの場合、JavaScriptの解釈に時間を要する場合もあるとか・・・
Response 01
2003年03月04日 (火) 11時19分> 憲ちゃん 
Win+IE6では今のところ特に問題ありませんが・・・
今友人のところでWin+Netscape7.0で確認したところ、
元もとのサンプルも憲ちゃん作成のサンプルも、swfの制御ができません!
JavaScriptはこれがあるので本当に面倒です(-.-;
あまり気乗りしませんが、またそのうち考えて見ます(;^_^Aアセアセ。。。
特に必要なければ・・・
やはり、一体型のFLASHオンリーサイトが安定していてお勧めですねぇ(^^;

このページの先頭へ