ストップウォッチの表示を隠して、10秒00になるようにするゲームを1時間ぐらい遊んでしまう、ユゲタです。
なんでしょう。部活動などをやっていると、このストップウォッチ遊びがやめられなくなってしまいます。
運動部あるあるなんじゃないでしょうか?
あれ?オレバレーボール部・・・「ストップウォッチなんか試合以外でほとんど使わんやんけ!」というツッコミはナシでお願いします。
そして、今現在作っているとあるwebシステムで、タイムトライアル機能が必要になったので、その表示部分のストップウォッチ機能を作ったのですが、
比較的かんたんなプログラミングでできたので、tipsとして紹介したいと思います。
ソースコードと使い方
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=no">
<title>stopwatch</title>
<link rel="stylesheet" href="stopwatch.css" />
<script src="stopwatch.js" async></script>
</head>
<body>
<div id="stopwatch"></div>
</body>
</html>
#stopwatch{
border:1px solid black;
padding:10px;
width:200px;
text-align:center;
}
(function(){
function MAIN(){
this.set_timer();
}
MAIN.prototype.get_stopwatch = function(){
return document.getElementById("stopwatch");
};
MAIN.prototype.set_timer = function(){
this.timer_start = (+ new Date());
this.timer_interval = setInterval(this.view_timer.bind(this) , 10);
};
MAIN.prototype.view_timer = function(){
let current_timer = (+new Date()) - this.timer_start;
let elm = this.get_stopwatch();
elm.textContent = this.conv_timer_format(current_timer);
};
// return @ 時:分:秒
MAIN.prototype.conv_timer_format = function(current_timer){
let sec = Math.floor(current_timer / 1000);
let ms = Math.floor((current_timer - sec*1000) * 1000);
let s = sec % 60 || 0;
let min = Math.floor((sec - s) / 60);
let m = min % 60 || 0;
let h = Math.floor((min - m) / 60) || 0;
return ("00" + h).slice(-2) +":"+ ("00" + m).slice(-2) +":"+ ("00" + s).slice(-2) +"."+ String(ms).substr(0,2);
};
MAIN.prototype.stop_timer = function(){
if(!this.timer_interval){return;}
clearInterval(this.timer_interval);
};
MAIN.prototype.check_word = function(){
let current_elm = this.get_currentWord_elm();
if(!current_elm){return false;}
let current_val = current_elm.textContent.trim();
if(current_val === ""){return false;}
let targets = document.querySelectorAll(".word-table [data-num]");
for(let target of targets){
if(target === current_elm){continue;}
if(target.textContent.trim() === current_val){
return true;
}
}
};
switch(document.readyState){
case "complete" : new MAIN();break;
default : window.addEventListener("load" , function(){new MAIN()});break;
}
})()
上記を同じフォルダに設置して、webブラウザでindex.htmlを開くと、次のように実行されます。
解説
基本的に、setIntervalで定期処理をする仕様にしており、
start時の時間をずっと変数保持しているのを、現在時間からstart時間を差し引いた値のフォーマットを整えて、表示しています。
今回はストップウォッチと言っておきながら、単純にページを開いたタイミングからの時間のカウントアップするtipsにしていますが、
stopボタンや、start/stopのトグルボタンを就けることで、簡単にストップウォッチを作成することができます。
10分ぐらいで作ったコードですが、時分秒をそれぞれ計算するのが、最初少しだけ戸惑ったので、自分内での暫定ライブラリにしておこうと作ったのがこのソースでした。
フォーマットも2桁縛りというのを設置するのも、他のソースでもよく使う方法なので、この方法を覚えておくことをおすすめします。
("00" + m).slice(-2)
この部分ですね。
2桁のゼロパディング処理です。
こんな場面で使える
動画などを自分で表示してタイムラインなどを表示する時に、今回のようなフォーマットでの時間軸表示が便利に使えます。
また、何かしらのタイムトライアルゲームの時にも同じフォーマットで使用することができるので、ぜひコピペまたは、
自己流に書き直してお使いください。
え?著作権?・・・ないないない!そんなもの、MITですよ。ありませんがな。
お好きにお使いください。
0 件のコメント:
コメントを投稿