/**
* @namespace subClock
*/
// 'use strict'
(function (d) {
//canvas要素を取得
const el = d.querySelector('.clock');
//コンテキストを取得
const ctx = el.getContext('2d');
// 基本色の設定
ctx.fillStyle = 'white';
ctx.strokeStyle = 'black';
//時計描画と現在時刻表示の関数を、1000ミリ秒ごとに実行する
setInterval( () => {
activateClock(ctx);
}, 1000);
//現在時刻を取得
function _getCurTime() {
const cur = new Date();
const time = {
hour : cur.getHours() % 12, //12時間制の数字
hourOriginal : cur.getHours(), //24時間制の数字
min : cur.getMinutes(),
sec : cur.getSeconds()
};
return time;
}
//現在時刻を表示
function showCurTime(elm) {
const insertArea = d.querySelector(elm);
const h = _getCurTime().hourOriginal;
const m = _getCurTime().min;
const s = _getCurTime().sec;
const msg = `${h}:${m}:${s}`;
insertArea.innerHTML = msg;
}
//時計を描画
function activateClock(ctx, time) {
let width = el.width;
let height = el.height;
//背景の円を描画
ctx.beginPath();
ctx.arc( width/2, height/2, width/2+15, 0, 2 * Math.PI); //円のパスを設定 ・・・補足1
ctx.fill(); //円のパスを塗りつぶす
//目盛を描画 ・・・補足2
for (let i = 0; i < 60; i++) {
let r = 6 * Math.PI / 180 * i;
const w = i % 5 === 0 ? 4 : 1;
_setCtxStyle(ctx, 'white', 'black', w);
_drawCtx(ctx, r, 100, -5);
}
//現在時刻を定数に代入
const h = _getCurTime().hour;
const min = _getCurTime().min;
const sec = _getCurTime().sec;
//短針を描画 ・・・補足3
const hourR = h * 30 * Math.PI / 180 + min * 0.5 * Math.PI / 180;
_setCtxStyle(ctx, '', 'black', 3);
_drawCtx(ctx, hourR, 0, -60);
//長針を描画 ・・・補足3
const minR = min * 6 * Math.PI / 180;
_setCtxStyle(ctx, '', 'black', 3);
_drawCtx(ctx, minR, 0, -90);
//秒針を描画 ・・・補足3
const secR = sec * 6 * Math.PI / 180;
_setCtxStyle(ctx, '', 'red', 1);
_drawCtx(ctx, secR, 0, -70);
}
//コンテキストの描画スタイルを設定する関数
function _setCtxStyle(ctx, fillColor, strokeColor, lineWidth) {
ctx.fillStyle = fillColor;
ctx.strokeStyle = strokeColor;
ctx.lineWidth = lineWidth;
ctx.lineCap = 'round';
}
//線を描画する関数 ・・・補足4
function _drawCtx(ctx, rotation, moveToY = 0, length) {
let width = el.width;
let height = el.height;
ctx.save();
ctx.translate( width/2, height/2);
ctx.rotate(rotation);
ctx.beginPath();
ctx.moveTo(0, moveToY);
ctx.lineTo(0, moveToY + length);
ctx.stroke();
ctx.restore();
}
})(document);