使用Canvas 绘制动态时钟

<canvas id="clock" width="600px" height="600px"></canvas>
## js代码
        
var dom = document.getElementById('clock');

var ctx = dom.getContext('2d');

var width = ctx.canvas.width;
var height = ctx.canvas.height;

var r  = width / 2;
var rem = width / 200;
function drawBackground(){

   ctx.save();
   ctx.translate(r,r); // 中心
   ctx.beginPath();  // 起始路径
   ctx.lineWidth = 6 * rem; // 线条的宽度
   ctx.arc(0, 0, r - ctx.lineWidth / 2, 0, 2 * Math.PI, false); // 创建圆
   ctx.stroke(); // 绘制已定义的路径

   // 设置 时针 顺时针从中心
   var hourNumbers = [3,4,5,6,7,8,9,10,11,12,1,2];
   ctx.font = 18 * rem +'px Arial'; // 设置字体 字号
   ctx.textAlign = 'center';  // 设置文本水平居中
   ctx.textBaseline = 'middle' // 设置文本垂直居中
       // 遍历小时数
       hourNumbers.forEach(function(number,i){
           var rad = 2 * Math.PI / 12 * i; // 设置每个角的弧度
           var x = Math.cos(rad) * (r - 30 * rem);  // X坐标半径
           var y = Math.sin(rad) * (r - 30 * rem); // y坐标半径
           ctx.fillText(number, x,y); // 设置文本
       })


       // 绘制 60个点  有时针的地方显示黑色  没有时针的地方显示灰色
       for (var i=0; i < 60; i ++ ){
           var rad = 2 * Math.PI / 60 * i;
           var x = Math.cos(rad) * (r - 18 * rem);  // X坐标半径
           var y = Math.sin(rad) * (r - 18 * rem); // y坐标半径
           ctx.beginPath();  // 重启路径
           if (i % 5 == 0) {
               ctx.fillStyle = "#000"
               ctx.arc(x, y, 2 * rem, 0, 2 * Math.PI, false);
           } else {
               ctx.fillStyle = "#ccc"
               ctx.arc(x, y, 2 * rem, 0, 2 * Math.PI, false);
           }
           ctx.arc(x, y, 2, 0, 2 * Math.PI, false);

           ctx.fill();
       }

}

//  绘制小时 
function drawHour(hour , minute) {
   ctx.save();
   ctx.beginPath();
   var rad = 2 * Math.PI / 12 * hour;
   var mrad = 2 * Math.PI / 12 / 60 * minute;
   ctx.rotate(rad + mrad);
   ctx.lineWidth = 6 * rem;
   ctx.lineCap = "round";
   ctx.moveTo(0, 10 * rem);
   ctx.lineTo(0, -r / 2);
   ctx.stroke();
   ctx.restore();
}
//  绘制分钟
function drawMinute(minute) {
   ctx.save();
   ctx.beginPath();
   var rad = 2 * Math.PI / 60 * minute;
   // var rad = 2 * Math.PI / 12 * hour;
   ctx.rotate(rad);
   ctx.moveTo(0, 10 * rem);
   ctx.lineWidth = 3 * rem;
   ctx.lineCap = "round";
   ctx.lineTo(0, -r + 30 * rem);
   ctx.stroke();
   ctx.restore();
}

// 绘制秒
function drawSecond(second) {
   ctx.save();
   ctx.beginPath();
   ctx.fillStyle = '#c14543'
   var rad = 2 * Math.PI / 60 * second;
   // var rad = 2 * Math.PI / 12 * hour;
   ctx.rotate(rad);
   ctx.moveTo(-2 * rem, 20 * rem);
   ctx.lineTo(2 * rem, 20 * rem);
   ctx.lineTo(1, -r + 18 * rem);
   ctx.lineTo(-1, -r + 18 * rem);

   ctx.fill();
   
   ctx.restore();
}

// 绘制 表中小白点
function drawDot() {
   ctx.beginPath();
   ctx.fillStyle = '#fff'
   ctx.arc(0, 0, 3 * rem, 0, 2*Math.PI, false);
   ctx.fill();
}

function draw(){
   ctx.clearRect(0, 0, width, height);
   var now = new Date();
   var hour = now.getHours();
   var minute = now.getMinutes();
   var second = now.getSeconds();
   drawBackground();
   drawHour(hour, minute);
   drawMinute(minute);
   drawSecond(second);
   drawDot();
   ctx.restore();
}

draw();
// 定时 动态播放
setInterval(draw, 1000);

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • Cnavas绘制时钟 背景图的绘制(大圆、数字、小圆点),掌握基础知识:圆的绘制(arc方法),关于圆的弧度的计算...
    Iris_mao阅读 7,218评论 7 26
  • html: js: var dom = $("#clock"); var ctx = dom[0].getCont...
    后简1994阅读 2,224评论 0 1
  • 一:canvas简介 1.1什么是canvas? ①:canvas是HTML5提供的一种新标签 ②:HTML5 ...
    GreenHand1阅读 10,222评论 2 32
  • 一、canvas简介 1.1 什么是canvas?(了解) 是HTML5提供的一种新标签 Canvas是一个矩形区...
    Looog阅读 9,383评论 3 40
  • 一、做了什么有价值的事? 1.约了池老师聊心理问题 2.听Tom老师红点直播 二、发现问题 一直思考停不下来 三、...
    小小小小丶兵阅读 1,657评论 0 0

友情链接更多精彩内容