今回は、画期的(?)なクラスを定義してみました。 あなたは、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 戻る |