- 画一个动态时钟,显示 当前时间
<!DOCTYPE html>
<html>
<body>
<canvas id="canvas" width="350" height="350" style="border:1px solid">
Your browser does not support the canvas element.
</canvas>
<script type="text/javascript">
function clock(){
var now = new Date();//创建一个时间对象
var ctx = document.getElementById('canvas').getContext('2d');
ctx.save();//保存状态 栈1
ctx.clearRect(0,0,350,350); //清空画布
//ctx.scale(0.4,0.4);缩小整个图形,根据需要使用
ctx.translate(180,180);//移动原点 到(180,180)
ctx.rotate(-Math.PI/2);//逆时针旋转90°
ctx.strokeStyle = "black";//绘线颜色,黑色
ctx.fillStyle = "white";//填充颜色白色
ctx.lineWidth = 5;//线宽 5
ctx.lineCap = "square";//线帽为正方形
ctx.save();//保存状态,栈2 原点为(180,180)
// 12个表示小时的线段 Hour marks
for (var i=0;i<12;i++){
ctx.beginPath();//新建路径
ctx.rotate(Math.PI/6);//顺时针旋转30°
ctx.moveTo(100,0);//起始点
ctx.lineTo(120,0);//终点
ctx.stroke();//绘线
}
// (60-12)=48个 表示分针的线段 Minute marks
ctx.restore();//恢复状态,当前状态 = 状态2 = 原点=(180,180)
ctx.save();//保存状态2=栈2
ctx.lineWidth = 5;
for (i=0;i<60;i++){
if (i%5!=0) {//当i对5的余数,不为0时,5的倍数,余数为0时,正好是12个时针的位置,不需要画了,不加这一句,效果也区别不大
ctx.beginPath();
ctx.moveTo(117,0);
ctx.lineTo(120,0);
ctx.stroke();
}
ctx.rotate(Math.PI/30);
}
ctx.restore();//恢复状态
var sec = now.getSeconds();//获得当前时间的秒
var min = now.getMinutes();//获得当前时间的分
var hr = now.getHours();//获得当前时间的小时
hr = hr>=12 ? hr-12 : hr;//三目运算符,hr >=12 ?是否成立 成立执行后面的 hr-12 不成立 执行:后面的hr 再把值赋给 hr;运算符的优先级 先执行三目 在赋值给hr
ctx.fillStyle = "black";
// 时针转动 write Hours
ctx.save();
ctx.rotate( hr*(Math.PI/6) + (Math.PI/360)*min + (Math.PI/21600)*sec )
ctx.lineWidth = 14;
ctx.beginPath();
ctx.moveTo(-20,0);
ctx.lineTo(80,0);
ctx.stroke();
ctx.restore();
// 分针转动 write Minutes
ctx.save();
ctx.rotate( (Math.PI/30)*min + (Math.PI/1800)*sec )
ctx.lineWidth = 10;
ctx.beginPath();
ctx.moveTo(-28,0);
ctx.lineTo(112,0);
ctx.stroke();
ctx.restore();
// 秒针转动Write seconds
ctx.save();
ctx.rotate(sec * Math.PI/30);
ctx.strokeStyle = "#D40000";
ctx.fillStyle = "#D40000";
ctx.lineWidth = 6;
ctx.beginPath();
ctx.moveTo(-30,0);
ctx.lineTo(83,0);
ctx.stroke();
ctx.beginPath();
ctx.arc(0,0,10,0,Math.PI*2,true);
ctx.fill();
ctx.beginPath();
ctx.arc(95,0,10,0,Math.PI*2,true);
ctx.stroke();
ctx.fillStyle = "rgba(0,0,0,0)";
ctx.arc(0,0,3,0,Math.PI*2,true);
ctx.fill();
ctx.restore();
ctx.beginPath();
ctx.lineWidth = 14;
ctx.strokeStyle = '#325FA2';
ctx.arc(0,0,142,0,Math.PI*2,true);
ctx.stroke();
ctx.restore();
window.requestAnimationFrame(clock);
}
window.requestAnimationFrame(clock);
</script>
</body>
</html>
-
参考文档: MDN canvas 教程
-
- 感谢:♥♥♥ 如果这篇文章对您有帮助的话,可以点赞、评论、关注,鼓励下作者哦,感谢阅读 O(∩_∩)O哈哈~
-
转载 请注明出处 ,Thanks♪(・ω・)ノ
- 作者:Hey_Coder
- 来源:CSDN
- 原文:https://blog.csdn.net/VickyTsai/article/details/90450946