canvas时钟

在这里插入图片描述
代码:《精通HTML5+CSS3+JavaScript网页设计》
做个笔记

<!DOCTYPE html>
<html>
<head>
  <meta charset="UTF-8">
  <title></title>
</head>
<body>
  <canvas id="canvas" width="200" height="200"></canvas>
</body>
<script>
  var canvas = document.getElementById('canvas');
  var ctx = canvas.getContext('2d');
  if(ctx) {
    var timerId;
    var frameRate = 60;
    function canvObject() {
      this.x = 0;
      this.y = 0;
      this.rotation = 0;
      this.borderWidth = 2;
      this.borderColor = '#000000';
      this.fill = false;
      this.fillColor = '#ff0000';
      this.update = function() {
        if(!this.ctx) throw new Error('您没有指定ctx对象。');
        var ctx = this.ctx;
        ctx.save();
        ctx.lineWidth = this.borderColor;
        ctx.strokeStyle = this.borderColor;
        ctx.fillStyle = this.fillColor;
        ctx.translate(this.x, this.y);
        if(this.rotation) ctx.rotate(this.rotation * Math.PI/180);
        if(this.draw) this.draw(ctx);
        if(this.fill) ctx.fill();
        ctx.stroke();
        ctx.restore();
      }
    }
    function Line(){};
    Line.prototype = new canvObject();
    Line.prototype.fill = false;
    Line.prototype.start =[0,0];
    Line.prototype.end =[5,5];
    Line.prototype.draw = function(ctx){
      ctx.beginPath();
      ctx.moveTo.apply(ctx,this.start);
      ctx.lineTo.apply(ctx,this.end);
      ctx.closePath();
    };

    function Circle(){};
    Circle.prototype = new canvObject();
    Circle.prototype.draw = function(ctx){
      ctx.beginPath();
      ctx.arc(0, 0, this.radius, 0, 2 * Math.PI, true);
      ctx.closePath();
    };

    var circle = new Circle();
    circle.ctx = ctx;
    circle.x = 100;
    circle.y = 100;
    circle.radius = 90;
    circle.fill = true;
    circle.borderWidth = 6;
    circle.fillColor = '#ffffff';

    var hour = new Line();
    hour.ctx = ctx;
    hour.x = 100;
    hour.y = 100;
    hour.borderColor = "#000000";
    hour.borderWidth = 10;
    hour.rotaon = 0;
    hour.start = [0,20];
    hour.end = [0,-50];

    var minute = new Line();
    minute.ctx = ctx;
    minute.x =100;
    minute.y = 100;
    minute.borderColor = "#333333";
    minute.borderWidth = 7;
    minute.rotaon = 0;
    minute.start = [0,20];
    minute.end = [0,-70];

    var seconds = new Line();
    seconds.ctx = ctx;
    seconds.x =100;
    seconds.y = 100;
    seconds.borderColor = "#ff0000";
    seconds.borderWidth = 4;
    seconds.rotaon = 0;
    seconds.start = [0,20];
    seconds.end =[0,-80];

    var center = new Circle();
    center.ctx = ctx;
    center.x = 100;
    center.y = 100;
    center.radius = 5;
    center.fill = true;
    center.borderColor = 'orange';

    for(var i=0,ls=[],cache;i<12;i++){
      cache = ls[i] = new Line();
      cache.ctx = ctx;
      cache.x = 100;
      cache.y = 100;
      cache.borderColor = "green";
      cache.borderWidth = 2;
      cache.rotation = i * 30;
      cache.start = [0, -70];
      cache.end = [0, -80];
    }

    timerId = setInterval(function () {
      // 清除画布
      ctx.clearRect(0,0,200,200);
      // 填充背景色
      ctx.fillStyle = 'orange';
      ctx.fillRect(0,0,200,200);
      // 表盘
      circle.update();
      // 刻度
      for(var i=0;cache = ls[i++];)cache.update();
      // 时针
      hour.rotation = (new Date()).getHours() * 30;
      hour.update();
      // 分针
      minute.rotation = (new Date()).getMinutes() * 6;
      minute.update();
      // 秒针
      seconds.rotation = (new Date()).getSeconds() * 6;
      seconds.update();
      // 中心圆
      center.update();
    },(1000/frameRate) | 0);
  } else {
    alert('您的浏览器不支持Canvas无法预览时钟!');
  }
</script>
</html>

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

痴心的萝卜

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值