プロが教えるわが家の防犯対策術!

トップページにFlashムービーを配置したのですが、
他のページを閲覧した後に再びトップページに戻ったときに、ムービーを再生せずに最後のフレームを表示させるにはどのようにしたらよいのでしょうか?

ムービーの最後のフレームをコピーして別のflashを作り、各ページの「topへ」ボタンには、こちらのflashへのリンクを書き込んでみたのですが、ブラウザの戻るボタンを使うとやはり再生されてしまいます。

分かりにくい説明ですみませんが、よろしくお願いいたします。

※制作環境は、WIN-XP FLASH8です。

A 回答 (4件)

#2の方の引用先を回答した sassakun と申します。



SharedObject は JavaScript ではありません。
JavaScript で言うところの Cookie が SharedObject です。
SharedObject は Flash のスクリプトなので Flash 単独で解決できます。

書かれているご質問ですが,
ポイントは2つあります。

◎ 1度目であっても何度目であっても,いきなり最終フレームには飛べない。
  →対処:全フレームのロード待ち処理を入れる
◎ 1度SWFをアンロードするとそこにある変数などもすべて初期化されるのでSWF単独では何度目の訪問かわからない。
  →対処:SharedObjectで前回アンロードした日時を記録

という2点です。
引用先のURLではムービークリップを作成してそこにスクリプトを書いていますが,
おそらく,ムービークリップに書くと色々実験するときに便利だからだと思います。
今になればムービークリップに書いた意味もよくわかりませんので,
_root(メインムービー)のフレーム1とフレーム2を使って,
もう少し理にかなったスクリプトに書き替えてみました。

注釈行(コメント行)も入れていますので,とりあえずコピペされて,
動くかどうかを試したうえで,後からどうなっているか理解してみてはどうでしょうか。

---- フレーム1 のスクリプト ------------
// とりあえずストップ
this.stop();
// ---全てのフレームのロード待ち処理--- //
this.onEnterFrame = function() {
// 全てのフレームがロードされたらスタート
if (this._framesloaded>=this._totalframes) {
this.play();
delete (this.onEnterFrame);
} else {
this.stop();
}
};
----------------------------------


---- フレーム2 のスクリプト ------------
// ★期限の設定(単位秒)
var timeLimit = 20;
// SharedObjectの読込み
var myObject = SharedObject.getLocal("myWatch");
// Dateオブジェクトの作成
var myDate = new Date();
// 変数 Watch2 に現在の時刻を記録
var Watch2 = myDate.getTime();

// SharedObject に Watch1 が存在したら
if (myObject.data.Watch1 != undefined) {
// SharedObject内のWatch1をこのWatch1に代入
var Watch1 = myObject.data.Watch1;
// SharedObject に Watch1 が存在しなかったら
} else {
// Watch1に 0 を代入
Watch1 = 0;
}

// もし期限内であれば最終フレームに飛ぶ
if (Watch1+(timeLimit*1000)>Watch2) {
this.gotoAndStop(this._totalframes);
}

// SharedObject に時刻を随時記録
this.onEnterFrame = function() {
myDate = new Date();
myObject.data.Watch1 = myDate.getTime();
};
----------------------------------

フレーム2の1(2)行目の
var timeLimit = 20;
は実験のために20秒にしています。
実際は 3600秒 とかの方が良いかもしれません。

上のスクリプトの場合,
フレーム1 とフレーム2 には何も置かない方が良いです。
置いても良いですが,最終フレームに行くときにちらっとそれらが見えてしまいます。

 □ レイヤー 筆・・|○|○       ←スクリプト用レイヤー
 □ レイヤー 筆・・|○ []|●>------>|● []|○
 □ レイヤー 筆・・|○ []|●///////[]|●/////
   ~ 略 ~      ~~ 略 ~~

これは,上のSWFが表示されているページから他のページに移ったとき,
または,上のSWFが表示されているページを閉じたときから時間がカウントされます。

引用先の回答#3でもその辺のことに触れていますが,
SWFが表示されてからの時間をカウントしているわけではありませんから,
ブラウザを指定時間以降に更新しても,最終フレームには飛びませんので注意してください。


なお,引用先の質問には続編が存在しています。
余裕があれば,参考にしてみてください。
余裕がなければさらに混乱する可能性もありますが。

「(1)loading後再生→(2)すぐにアクセスした場合飛ばす」
http://oshiete1.goo.ne.jp/kotaeru.php3?q=1814846
  ↑教えて!goo  ↓OKWave (同じです)
http://okwave.jp/kotaeru.php3?q=1814846


その他参考URL

16.nowloading 
http://fpower.org/tips.htm#FL016
SharedObject クラス
http://www.1art.jp/flash/le/lesson41/lesson41.htm
    • good
    • 0
この回答へのお礼

たびたびのご回答、ありがとうございます!

できました!
ムービーの再生回数ではなく、別ページに移ってからの経過時間を基準にしてるんですね。
とても詳しいコメントをつけて頂き、勉強になります。

引用元の続編も拝見したのですが。。。
もう少し、じっくり見直してみたいと思いました。

思うように動くようになって、とても嬉しいです。
ありがとうございました。

お礼日時:2006/05/23 23:42

No1です。


CGIなどを使用しなくてもNo2の方がおっしゃっているようにjavascriptでも可能ですが、javascriptを使用しない設定にしている場合意味がなくなってしまう為、
CGIなどの方がいいかなと思いました。
javascriptの方が楽ですが、より多くの人にHPを楽しんでもらいたいと思うんでしたらCGIの方がお勧めです。
    • good
    • 0
この回答へのお礼

たびたび、ありがとうございます!

CGI側の設定で、トップページの読み込み回数に応じてFlashの再生を制御するという考え方なのでしょうか?
CGIの設定については全くの未経験ですので、調べてはみたものの、まったく歯が立たない状態です。もう少し調べてみたいと思います。

ありがとうございました。

お礼日時:2006/05/23 22:52

SharedObject = JavaScriptでいうところの Cookie


私の回答ではありませんし、長いスレッドですがご参考に。
「flash  トップページ 自動再生防止」
http://okwave.jp/kotaeru.php3?q=1703563
    • good
    • 0
この回答へのお礼

ご回答、ありがとうございます!

こちらのスレッドの内容も参照させて頂いたのですが、何とも上手くできなかったもので。。。
もう一度、トライしてみます。

ありがとうございました!

お礼日時:2006/05/22 13:33

TOPページにFLASHがあるんでしたらまず必ずSKIPボタンをつけましょう(TOPページのFLASHがとてもうざく思う人もいる為)



>ブラウザの戻るボタンを使うとやはり再生されてしまいます。
自分の知る限りではFLASHのみで出来ないんではないかと思います。
CGIなどで最初読み込んだ時にクッキーなど発行して2度目にそのページを読み込んだ時はFLASHを飛ばす処理を入れればいいんではないでしょうか?
    • good
    • 0
この回答へのお礼

早速のご回答、ありがとうございます!

トップページの再生を1回だけにするにはCGIなどの知識が必要なんですね?
ちょっと調べてみます。

SKIPボタンについては、私もそう思います。
アドバイス、ありがとうございました。

お礼日時:2006/05/22 13:25

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!