| 今回は、画期的(?)なクラスを定義してみました。 あなたは、JavaScriptのタイマー処理に疑問を感じたことはありませんか? setTimeoutが返す値が数なので、オブジェクトとして扱えず、タイマーの管理が難しかったり、 一時停止ができなかったりして、妥協してしまったことはありませんか? そんな眠れない夜はもうあなたに訪れることはないでしょう。今、私たちにはこの、 Timerクラスがついています。ということでタイマーのクラスです。一時停止できます。 クラスが定義されているので、もちろんオブジェクトとして扱えます。 |
| コード |
function Timer(){
this.Name='';
this.Time=0;
this.Exe=new Function();
this.StartTime=0;
this.Actual=0;
this.TExe=function(){
clearTimeout(this.Actual);
this.Actual=0;
this.Time=0;
this.Exe();
}
this.Start=function(){
this.StartTime=new Date().getTime();
this.Actual=setTimeout('Public.Timers.'+this.Name+'.TExe();',this.Time);
}
this.Stop=function(){
if(this.Actual){
var d=new Date();
this.Time-=d.getTime()-this.StartTime;
clearTimeout(this.Actual);
this.Actual=0;
}
}
} |
| Publicというのはsakataが日常的に用いる、その名の通りPublicな変数などを格納するオブジェクトです。 Public.Timersというのは、配列で、タイマーを全てここに格納します。Publicの中でタイマーを扱うためです。 |
| Name |
| タイマーの名前です。eval('Public.Timers.'+Name)によってこのタイマーは参照できます。 |
| Time |
| 処理を行うまでの時間(ミリセコンド単位)です。1秒なら1000を指定します。 |
| Exe |
| Timeミリセコンド後に行う処理です。関数オブジェクトです。一応。 |
| StartTime |
| 特にこのプロパティは変化させないでください。内部処理用の変数です。 |
| Actual |
| setTimeoutによって作られた変数です。実際のタイマーはこいつです。 |
| TExe() |
| 内部処理用の関数です。 |
| Start() |
| このタイマーを開始します。 |
| Stop() |
| このタイマーを一時停止します。 |
| これを利用して、以下のようなプログラムを組んでみました。 AからZまでのアルファベットのいずれかのキーを押すとゲージが表示され、 押している間はゲージが溜まり(表示されません)、離すとゲージが止まります(表示されます)。 ゲージは3秒で満タンになり、それ以上は溜まりません。 キーを押すと3秒のタイマーがStart()し、キーを離すとタイマーをStop()させます。 3秒になるとタイマーは無くなり、しかしPublic.Timersには残っているので、処理が行われず、 そこでゲージは止まるわけです。 |
| 以下にゲージが表示されます: |
| パッとしないサンプルですいません |
| top 戻る |