タイマー ver1.0
タイマーアプリです。
使い方
現在時刻を基準に、何時間何分何秒後に通知するかを指定し、タイマーをセットします。
セットした時間が来たら自動的に通知します。
セットしたタイマーの時間は下の方に表示されます。
使っているめぼしい機能
ChromeのNotification APIを使っています。
HTML5から追加された数値用の入力コンポーネント(?)を使ってます。
数値のステップと範囲が指定できる上に、JavaScriptで数値を取り出すときにも、エラー処理が必要なparseIntメソッドを使わなくてよいので便利です。
ソースコード
{
"name": "Timer",
"description": "現在時刻の表示",
"version": "1.0",
"app": {
"launch": {
"local_path": "main.html"
}
},
"icons": {
"16": "icon_16.png",
"48": "icon_48.png",
"128": "icon_128.png"
},
"permissions": [
"notifications"
]
}
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>HelloWorld</title>
<link rel="stylesheet" href="./css/Timer.css">
<script src="./js/Timer.js"></script>
</head>
<body onload="javascript:disptime()">
<div id="time">
時間がここに表示されます。
</div>
<form>
Timer Set After<input type="number" id="hours" step="1" min="0" max="23" value="0">: <!--実際は開業しない-->
<input type="number" id="minutes" step="1" min="0" max="59" value="0"> <!--実際は開業しない-->
<input type="number" id="seconds" step="1" min="0" max="59" value="0"> <!--実際は開業しない-->
<input type="button" value="Set" onclick="javascript:setTimer()">
</form>
<div id="timer">
</div>
</body>
</html>
body {
text-align : center;
}
var timers = []; //タイマーの配列
//現在時刻を表示する
function disptime(){
var d = new Date();
document.getElementById("time").innerHTML = timeToString(d);
window.setTimeout("disptime()", 1000);
timerCheck(d);
}
//タイマーセット
function setTimer(){
var new_timer = new Date(); //現在時刻
var form = document.forms[0];
//入力された時、分、秒を足す
new_timer.setHours(form.hours.valueAsNumber + new_timer.getHours());
new_timer.setMinutes(form.minutes.valueAsNumber + new_timer.getMinutes());
new_timer.setSeconds(form.seconds.valueAsNumber + new_timer.getSeconds());
new_timer.setMilliseconds(0);
d = new_timer.getTime();
//タイマー配列に挿入ソート(後ろから)
for(var i=timers.length;i>0;i--){
timer = timers[i-1].getTime();
if(timer < d){
timers[i] = new_timer;
break;
} else {
timers[i] = timers[i-1];
}
}
if(i==0){
timers[0] = new_timer;
}
dispTimers();
}
//タイマーにセットされた時間を表示
function dispTimers(){
var timer_text = "TIMER:<br />";
var timer;
for(var i=0;i<timers.length;i++){
var timer = timers[i];
timer_text += timeToString(timer) + "<br />";
}
document.getElementById("timer").innerHTML = timer_text;
}
function timeToString(d){
var hours = d.getHours();
var minutes = d.getMinutes();
var seconds = d.getSeconds();
if(hours < 10){
hours = "0" + hours;
}
if(minutes < 10){
minutes = "0" + minutes;
}
if(seconds < 10){
seconds = "0" + seconds;
}
return hours + ":" + minutes + ":" + seconds;
}
//時間が過ぎたタイマーが無いかチェック
function timerCheck(d){
now = d.getTime();
flg = false;
for(var i=0;i<timers.length;i++){
var timer = timers[i].getTime();
if(timer < now){
flg = true;
} else {
break;
}
}
if(flg){
latest_timer = timers[i-1];
timers.splice(0,i); //時間が過ぎたタイマーは消す
notify("時間です!","タイマーにセットされた " + timeToString(latest_timer) + " が過ぎました。");
dispTimers();
}
}
//通知windowを出すためのメソッド
function notify(title, message){
//マニフェストファイルへの記述で許可されている
if ( webkitNotifications.checkPermission() == 0 ) {
var notify_window = webkitNotifications.createNotification('icon_48.png', title, message);
notify.window.show();
} else {
//デスクトップへの通知許可を要求する
window.alert(message);
webkitNotifications.requestPermission();
}
}
コメント募集!
何かコメントあれば下さい!
最終更新:2012年04月17日 22:07