- ベストアンサー
FLASH上で日数カウントダウン
あるイベント開催日までの「あと○○日」というカウントダウン表示を自動でFALSH上で行いたいのですが、 色々調べてみても、その日の日付を表示させる方法しか見つけることができませんでした・・。 例えばここなどですが、 http://www.okweb.ne.jp/kotaeru.php3?q=805707 ↑ここのスクリプトをどうにか変えれば良いのかなとも思ったのですがよく分からなかった次第です。 どなたか具体的な方法、もしくはサンプルなどが記載されているページなどご存知ないでしょうか? よろしくお願い致します。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
ActionScriptの変数を使用すればできると思います。表現方法は様々なので方法は多数あるかと思います。まず、開催日が、7月5日と想定し、5月からの日数がカウントダウンする、MovieClipを作成します。例題ですので、参考に応用して下さい。 最初のフレームにカウントダウンとなる数字が入るテキストフィールドを設けます。方法は、テキストツールで画面に「ダイナミックテキスト」でテキストフィールドを設け、そのフィールドの変数に任意で変数値を記述します。ここでは、「dayCount」とします。そして、レイアウト上、何か数字を入れておきましょう。「00」でよいでしょう。(何も入れなくても良いですが、数字を入れておいたい方がデザインがやりやすいからです。)次にそのフィールドの左に適すとツールの静止テキストで「あと」と描き、右側に「日」と書きます。これで見栄えは、できあがりです。「あと00日」となっていると思います。 つぎに、先ほどダイナミックテキストで設定したテキストフィールドをActionScriptでカウントダウンの数字が日にちよって変わる設定をします。 まず、ActionScript(以下ASと記述)用に空のレイヤーを設けます。先ほどのテキストを書いたレイヤーの上に空の○のキーフレームができるかと思います。その○を選択し、ASを記述します。 ▼ここから記述 this.stop(); //Movieのここのフレームで止める。 dtObj=new Date(); mm=dtObj.getMonth()+1; //mmに今月を格納 dd=dtObj.getDate(); //ddに本日を格納 month5=31; //5月は31の日数がある month6=30; //6月は30の日数がある eventDay=5; //開催日は5日である(7月の日数はスクリプト上関係ないので5だけ) if(mm==5){ totalDay=eventDay+month5+month6; } else if(mm==6){ totalDay=eventDay+month6; } else{ totalDay=eventDay; } //上記は、今月の1日から開催日までの総日数をtotalDayに格納しています。 _root.dayCount=totalDay-dd; //先ほどのテキストフィールドの変数「dayCount」に「totalDay」から本日の日にちを引いた数値が格納される、つまりカウントダウンの数字が入る。 ▲ここまでActionScript 上記をコピペで使えるかと思います。 開催当日になると数字が0になっていると思います。まっあえて言うなら、ASの最後に if(_root.dayCount==0){ _root.gotoAndStop(_currentframe+1); } として、もし0だったら、次のフレームにいき、そのふれーむを見せる(つまり、「本日開催!」とすることができます) なかなか言葉だけで説明するのは難しいので、わかりにくいかと思いますが、こつとしては、本日の日にちをゲットし、開催日まで何日あるかというスクリプトを作れば良いのだと思います。スクリプト的には、これだけではなく様々な方法があっていろいろなやり方があります。 また行き詰まったら、ご質問下さい。
その他の回答 (1)
- DPE
- ベストアンサー率85% (666/776)
Date オブジェクトには、協定世界時の 1970 年1月1日0時から指定の日時までの時間を、ミリ秒で返すメソッドがあります。これを使って、次のように考えてみてはいかがでしょう。 まず、今日の年月日を Date オブジェクトの各メソッドを使って取得します。 取得した年月日を元に、今日までの協定世界時を出します。これは、Date.UTC というメソッドで取得できます。Date.UTC メソッドは Math オブジェクトなどの使い方と同じで、自分で生成したオブジェクトのメソッドではなく、そのまま Date.UTC として使います。 同様に、イベント開催日までの協定世界時を Date.UTC で取得します。 Date.UTC の戻り値の単位はミリ秒です。2つの時刻の差分をとって日数に直し、これをダイナミックテキストで表示して完成です。 なお、Date オブジェクトでの月は、引数で渡す時も戻り値も、実際の月よりも1少なくして扱います。つまり、5月であれば4となりますのでご注意ください。 とりあえず、イベント開催日を 2004 年5月 31 日とすると、大体のスクリプトは次のようになるかと思います。 (↓このスクリプトをコピーして使う場合は、各行頭の全角のスペースを、全て半角のスペースかタブに置き換えてください。このまま使うとシンタックスエラーになります) //Date オブジェクトを生成 date_obj = new Date(); //今日の年月日を取得 today_year = date_obj.getFullYear(); today_month = date_obj.getMonth(); today_date = date_obj.getDate(); //イベントまでの協定世界時をミリ秒で取得 eventUTC = Date.UTC( 2004 , 5-1 , 31 ); //現在までの協定世界時をミリ秒で取得 todayUTC = Date.UTC( today_year , today_month , today_date ); //イベントまでの差分を日数に直す event_day = ( eventUTC - todayUTC )/1000/60/60/24; 変数がいろいろ出てきますが、最終的には event_day にイベントまでの日数が入ります。ダイナミックテキストでは event_day を表示してください。 なお、ここでは年月日だけで計算しましたが、Date.UTC の引数は更に細かく、時間や分・秒・ミリ秒単位まで指定できるようになっています。秒やミリ秒はさすがにやりすぎですけれど、時間や分を同様に取得して計算してみても、面白いかもしれません。
お礼
#1の方とはまた違う方法を、細かく説明いただきありがとうございました。 こちらの方法でも無事、カウントダウン表示を実現させることができました。 ActionScriptはまだまだ分かっていないことが多く、今回も頭を痛めていたところでしたので、本当に助かりました。それにとても勉強になりました。 本当にありがとうございました。 ポイントはどちらもとても有益な回答でしたので私としては格差が付けられない思いなのですが、最終的に先着順で決めさせていただきました。 その点ご了承ください。
お礼
とても細かく説明いただき本当にありがとうございます。 ご指示通りにやってみましたら、無事カウントダウン表示ができました。 本当にありがとうございました。 また、大変勉強にもなりました。 これからも精進していきたいと思います。