-
Notifications
You must be signed in to change notification settings - Fork 0
/
script.js
120 lines (104 loc) · 3.11 KB
/
script.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
const canvas = document.getElementById('canvas');
const faceColor = document.getElementById('face-color')
const borderColor = document.getElementById('border-color')
const lineColor = document.getElementById('line-color')
const largeHandColor = document.getElementById('large-hand-color')
const secondHandColor = document.getElementById('second-hand-color')
function clock() {
const now = new Date();
const ctx = canvas.getContext('2d');
// Setip Canvas
ctx.save() // Save the default state
ctx.clearRect(0, 0 , 500, 500);
ctx.translate(250, 250); // Put 0,0 in the middle
ctx.rotate(-Math.PI / 2) // Rotate clock -90deg
// Set default styles
ctx.strokeStyle = '#000000';
ctx.fillStyle = '#f4f4f4';
ctx.lineWidth = 5;
ctx.lineCap = 'round';
// Draw clock face/border
ctx.save();
ctx.beginPath();
lineWidth = 14;
ctx.strokeStyle = borderColor.value;
ctx.fillStyle = faceColor.value;
ctx.arc(0,0, 142, 0, Math.PI * 2, true)
ctx.stroke();
ctx.fill();
ctx.restore();
// Draw hour lines
ctx.save();
ctx.strokeStyle = lineColor.value;
for(let i = 0; i<12; i++) {
ctx.beginPath();
ctx.rotate(Math.PI / 6);
ctx.moveTo(100, 0);
ctx.lineTo(120, 0);
ctx.stroke()
}
ctx.restore();
// Draw minutes lines
ctx.save();
ctx.strokeStyle = lineColor.value;
ctx.lineWidth = 4;
for(let i = 0; i<60; i++) {
if(i % 5 !== 0){
ctx.beginPath();
ctx.moveTo(117, 0);
ctx.lineTo(120, 0);
ctx.stroke()
}
ctx.rotate(Math.PI / 30);
}
ctx.restore();
// Get current time
const hr = now.getHours() % 12;
const min = now.getMinutes();
const sec = now.getSeconds();
console.log(`${hr}:${min}:${sec}`);
// Draw hour hand
ctx.save();
ctx.rotate((Math.PI / 6) * hr + (Math.PI / 360) * min + (Math.PI / 21600) * sec);
ctx.strokeStyle = largeHandColor.value;
ctx.lineWidth = 14;
ctx.beginPath();
ctx.moveTo(-20, 0);
ctx.lineTo(80, 0);
ctx.stroke();
ctx.restore();
// Draw minute hand
ctx.save();
ctx.rotate((Math.PI / 30) * min + (Math.PI / 1800) * sec);
ctx.strokeStyle = largeHandColor.value;
ctx.lineWidth = 9;
ctx.beginPath();
ctx.moveTo(-28, 0);
ctx.lineTo(112, 0);
ctx.stroke();
ctx.restore();
// Draw sec hand
ctx.save();
ctx.rotate((sec * Math.PI / 30));
ctx.strokeStyle = secondHandColor.value;
ctx.fillStyle = secondHandColor.value;
ctx.lineWidth = 6;
ctx.beginPath();
ctx.moveTo(-30, 0);
ctx.lineTo(100, 0);
ctx.stroke();
ctx.beginPath();
ctx.arc(0, 0, 10, 0, Math.PI * 2, true);
ctx.fill();
ctx.restore();
ctx.restore(); // Restore the default state
requestAnimationFrame(clock);
}
requestAnimationFrame(clock);
document.getElementById('save-btn').addEventListener('click', () => {
const dataURL = canvas.toDataURL('img/png');
const link = document.createElement('a');
link.download = 'clock.png';
link.href = dataURL;
link.click();
});