サイトトップ

Director Flash 書籍 業務内容 プロフィール

Macromedia Flash非公式テクニカルノート

setTimeout()関数

ID: FN0512001 Product: Flash

Platform: All
Version: 8.0 and above

*この関数は、ドキュメント化されていません[*1]。

シンタックス[*2]
setTimeout (functionReference:Object, delay:Number [, arg1:Object, arg2, ..., argN]) : Number

[*1] Flash 8 LiveDocsには、MacromediaのFrancis Cheng氏により、この関数の情報がコメントとして記載されました(2005年9月13日付)。したがって、setTimeout()関数は、正規にサポートされます。

[*2] setInterval()関数と同様の以下のシンタックスも、正しく動作します。しかし、前述注[*1]のコメントには、この点の記載がありません。

setTimeout (objectReference:Object, methodName:String, delay:Number [, arg1:Object, arg2, ..., argN]) : Number

引数
functionReference:Object - 指定されたdelayの時間が経過したとき、実行されるべき関数の参照。

delay:Number - 時間を指定するミリ秒の数値。指定時間が経過すると、functionReferenceで参照される関数が呼出されます。

arg:Object [省略可能] - 任意の数の引数を、カンマ区切りで指定します。これらの引数は、functionReferenceで参照される関数に渡されます。

戻り値
setTimeout()関数のコールバック設定を識別するための整数値。この戻り値をclearTimeout()関数の引数に渡せば、コールバックの設定をクリアできます。

説明
setTimeout()関数は、functionReferenceで参照する関数を、delayに指定した時間が経過したとき、オプションのargを引数にして呼出します[*3]。コールバック関数functionReferenceが呼出されるのは、1度だけです。一定の時間間隔で、コールバック関数を繰返し呼出したいときには、setInterval()関数を使います。

呼出されるコールバック関数内には、this参照が存在しません。したがって、参照したいタイムラインやオブジェクトは、引数として渡す必要があります。

[*3] ActionScript 2.0クラス定義ファイル中でsetTimeout()関数を使うと、コンパイルエラーになります。Flash 8のインストール時に作成されるユーザーのConfigurationフォルダ内のClassesフォルダにあるtoplevel.asファイルの中に、setTimeout()clearTimeout()関数が定義されていないからです。

この問題を避けるためには、クラス定義内では_global.setTimeout()、_global.clearTime()のかたちでアクセスする必要があります。

[*4] 前出注[*2]のシンタックスを使えば、thisを参照してコールバック関数を呼出すことは可能になります。


つぎのスクリプトは、1000ミリ秒経過後にコールバック関数を呼出し、setTimeout()関数の戻り値と実際の経過ミリ秒を[出力]します。この結果からわかるとおり、経過ミリ秒の指定はあまり精度の高いものではありません。

スクリプト001■1000ミリ秒経過後にsetTimeout()関数の戻り値と実際の経過時間を出力

var nID:Number = setTimeout(myFunction, 1000, getTimer());
function myFunction(nStart:Number):Void {
  trace(nID);
  trace(getTimer()-nStart);
}

以下のサンプルは、TextFieldを動的に作成し、1000ミリ秒経過後に、今日の日付データ(Dateインスタンスの文字列表現)をそのTextFiled.textプロパティに設定します。

スクリプト002■動的に作成したTextFieldに1000ミリ秒経過後に今日の日付データを設定

this.createTextField("my_txt", 1, 0, 0, 200, 25);
var my_txt:TextField;
var nID:Number = setTimeout(myFunction, 1000, my_txt);
function myFunction(_txt:TextField):Void {
  var my_date:Date = new Date();
  _txt.text = my_date.toString();
}

Player
ActionScript 1.0/Flash Player 8以降。

関連項目
clearTimeout()関数   setInterval()関数

_____

作成者: 野中文雄
作成日: 2005年12月1日


Copyright © 2001-2006 Fumio Nonaka.  All rights reserved.