研究室の研究会では発表時間が設定されており,先代の方が作成したタイマーで時間を測っている. htmlページでjavascriptを用いて,時間を計測するシステムである.
アラートを鳴らす時間を設定できるので5分ごと,30分後,みたいに細かい設定ができる.
また,ゆっくりボイスで"x分経過しました"と音声が再生されるので時間を意識しやすいしくみになっている.
しかし,タイムキーパーをやりながらちょこちょこ不満点が出てきた.
そして変更したい欲が出てきた.
変更したい点
- レスポンシブルにしたい
- 画面サイズを変更しても時間が見えるほうが嬉しい
- iPadでも音声が再生されるようにしたい
- PC上で実行しているが,持て余してるiPadをタイマー代わりにしたい(iOSではデータ制限のためか,音声が再生されない)
- 5分ごと鳴らすのは確定しているので設定を固定にしてしまいたい
ということで,とりあえず今までのタイマーを参考にしつつ,レスポンシブルに変更したタイマーを作成してみた.
--> これ
ちょうどjavascriptでなにか作ってみたい,という気持ちがあったのでイチからつくってみた.
以下作成記録です.
ストップウォッチ
元ページのソースコードをみるとここのサイトのストップウォッチを参考にしていた.
このコードではDate
とsetInterval
を使って時間を計測している.
Date
時間を扱うオブジェクト.
引数を与えない場合,現在時刻を取得する.
Start = new Date();
経過時間を計算したい場合はgetTime()
を用いる.
これは1970/1/1からの経過時間(ミリ秒)を求めるので時間Start
からStop
までの経過時間T
は以下のように計算できる.
T = Stop.getTime() - Start.getTime();
setInterval
一定時間ごとに関数を呼び出す. 引数の関数名はクオーテーションで囲む必要がある.
myInterval=setInterval("myWatch(1)",1);
clearInterval()
で解除するまで実行し続ける.
拡張したところ
一時停止とリセット
上のコードだと停止させて再び実行させるとリセットされてしまう.
そこでタイマーを実行する時,すでにタイマーが動作しているかどうかのフラグaction_flug
と今まで実行していた時間を記録しておくpause_time
を新しく実装した.
action_flug
が立っていればストップするときにスタートから現時刻までの時間をpause_time
に記録しておき,もう一度スタートする時は開始時間からpause_time
を引くようにする.
これにより一時停止が可能になった.
また,一時停止を実装することでリセット機能が新たに必要になったのでresetTimer()
追加した.これはclearInterval()
を実行する関数である.
レスポンシブル
時間がずれる原因となるのでなるべく軽いフレームワークがいい.
軽いcssにしたいと思った結果spectreを一旦採用してみた.
実行はうまくいってる感じ.配色はのちのち考えようと思う.
これから
- 音が鳴るように(Audio Web api?)
- 音が鳴る時間の設定方法(webアプリにしてもいいかもしれない)
参考
- Date - JavaScript | MDN
- WindowOrWorkerGlobalScope.setInterval() - Web API インターフェイス | MDN
- 一定時間で繰り返す(setInterval)-JavaScript入門