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