zoukankan      html  css  js  c++  java
  • canvas画的时钟

    结合几天来学习的canvas的API,终于完成了一个时钟呵呵

    html

    <!doctype html>
    <html>
    <head>
    <meta charset="utf-8">
    <title>canvas</title>
    <style type="text/css">
    canvas { border: 1px solid black; }
    #change{width:200px; line-height:30px; color:#fff; text-align:center; background:blue;}
    </style>
    <script src="canvas.js" type="text/javascript" charset="utf-8"></script>
    </head>
    
    <body>
    <canvas id="canvas" width="600" height="400">current stock price: $3.15 +0.15</canvas>
    
    
    </html>

    js

    window.onload = function() {
        new clock();
    }
    
    function clock() {
        var canvas = document.getElementById('canvas');
        var ctx = canvas.getContext('2d');
        ctx.clearRect(0, 0, 300, 300);
        var date = new Date(); //获取当前时间
        this.hour = date.getHours();
        this.min = date.getMinutes();
        this.sec = date.getSeconds();
    
        this.hour = this.hour + this.min / 60;
        this.hour = this.hour > 12 ? this.hour - 12 : this.hour;
    
        this.radius = 115;
        this.dotX = 150;
        this.dotY = 150;
        this.maxBorderWidth = 8;
        this.minBorderWidth = 2;
    
        this.clockBg();
        this.drawHour();
        this.drawMin();
        this.drawSec();
        this.onreset();
    }
    clock.prototype.onreset = function() {
        var ctx = canvas.getContext('2d');
        ctx.clearRect(0, 0, 300, 300);
        var date = new Date(); //获取当前时间
        this.hour = date.getHours();
        this.min = date.getMinutes();
        this.sec = date.getSeconds();
    
        this.hour = this.hour + this.min / 60;
        this.hour = this.hour > 12 ? this.hour - 12 : this.hour;
    
        this.clockBg();
        this.drawHour();
        this.drawMin();
        this.drawSec();
    
        var self = this;
        setInterval(function() {
            self.onreset();
        }, 1000);
    }
    clock.prototype.clockBg = function() {
        var ctx = canvas.getContext('2d');
        ctx.beginPath();
        ctx.fillStyle = "#e3e3e3";
        ctx.arc(this.dotX, this.dotY, this.radius, 0, 2 * Math.PI, false);
        ctx.fill();
        ctx.closePath();
    
        for (var i = 0; i < 60; i++) {
            ctx.save();
            var pointLong;
            if (i % 5 == 0) {
                ctx.lineWidth = this.maxBorderWidth;
                pointLong = 25;
            } else {
                ctx.lineWidth = this.minBorderWidth;
                pointLong = 12;
            }
            ctx.strokeStyle = "#000";
            ctx.translate(this.dotX, this.dotY);
            ctx.rotate(i * 6 * Math.PI / 180);
            ctx.beginPath();
            ctx.moveTo(0, -this.radius + this.maxBorderWidth);
            ctx.lineTo(0, -this.radius + this.maxBorderWidth + pointLong);
            ctx.closePath();
            ctx.stroke();
            ctx.restore();
        };
    }
    clock.prototype.drawHour = function() {
        var ctx = canvas.getContext('2d');
        ctx.save();
        ctx.strokeStyle = "#000";
        ctx.lineWidth = this.maxBorderWidth;
        ctx.translate(this.dotX, this.dotY);
        ctx.rotate(this.hour * 30 * Math.PI / 180);
        ctx.beginPath();
        ctx.moveTo(0, 20);
        ctx.lineTo(0, -70);
        ctx.closePath();
        ctx.stroke();
        ctx.restore();
    }
    clock.prototype.drawMin = function () {
        var ctx = canvas.getContext('2d');
        ctx.save();
        ctx.strokeStyle = "#00";
        ctx.lineWidth = this.maxBorderWidth;
        ctx.translate(this.dotX, this.dotY);
        ctx.rotate(this.min*6*Math.PI/180);
        ctx.beginPath();
        ctx.moveTo(0, 20);
        ctx.lineTo(0, -80);
        ctx.closePath();
        ctx.stroke();
        ctx.restore();
    }
    clock.prototype.drawSec = function() {
        var ctx = canvas.getContext('2d');
        ctx.save();
        ctx.strokeStyle = "#f00";
        ctx.lineWidth = this.minBorderWidth;
        ctx.translate(this.dotX, this.dotY);
        ctx.rotate(this.sec * 6 * Math.PI / 180);
        ctx.beginPath();
        ctx.moveTo(0, 20);
        ctx.lineTo(0, -100);
        ctx.closePath();
        ctx.stroke();
    
        ctx.beginPath();
        ctx.fillStyle = "#f00";
        ctx.arc(0, 0, 5, 0, 2 * Math.PI, true);
        ctx.closePath();
        ctx.fill();
        ctx.restore();
    }
    
    function drawTime() {
        var clock = document.getElementById('canvas');
        var ctx = clock.getContext('2d');
        ctx.clearRect(0, 0, 244, 300);
        var date = new Date(); //获取当前时间
        var hour = date.getHours();
        var min = date.getMinutes();
        var sec = date.getSeconds();
    
        hour = hour + min / 60;
        hour = hour > 12 ? hour - 12 : hour;
    
        var width = 244;
        var height = 280;
        var dot = { //时钟中心
            x: width / 2,
            y: width / 2,
            radius: 4
        }
        var radius = 115;
        var maxBorderWidth = 8;
        var minBorderWidth = 2;
    
        //绘制时钟中心点
        ctx.lineWidth = maxBorderWidth;
        ctx.beginPath();
        ctx.fillStyle = "#e2e2e2";
        ctx.arc(dot.x, dot.y, radius, 0, 2 * Math.PI, true);
        ctx.fill();
        ctx.closePath();
    
        //绘制时刻度、分刻度
        for (var i = 0; i < 60; i++) {
    
            ctx.save();
            var pointLong;
            if (i % 5 == 0) {
                ctx.lineWidth = maxBorderWidth;
                pointLong = 25;
            } else {
                ctx.lineWidth = minBorderWidth;
                pointLong = 12;
            }
            ctx.strokeStyle = "#000";
            ctx.translate(dot.x, dot.y);
            ctx.rotate(i * 6 * Math.PI / 180);
            ctx.beginPath();
            ctx.moveTo(0, -radius + maxBorderWidth);
            ctx.lineTo(0, -radius + maxBorderWidth + pointLong);
            ctx.closePath();
            ctx.stroke();
            ctx.restore();
        }
    
        //绘制时针
        ctx.save();
        ctx.lineWidth = maxBorderWidth;
        ctx.translate(dot.x, dot.y);
        ctx.rotate(hour * 30 * Math.PI / 180);
        ctx.beginPath();
        ctx.moveTo(0, -55);
        ctx.lineTo(0, 25);
        ctx.closePath();
        ctx.stroke();
        ctx.restore();
    
        //绘制分针
        ctx.save();
        ctx.lineWidth = maxBorderWidth;
        ctx.translate(dot.x, dot.y);
        ctx.rotate(min * 6 * Math.PI / 180);
        ctx.beginPath();
        ctx.moveTo(0, -97);
        ctx.lineTo(0, 25);
        ctx.closePath();
        ctx.stroke();
        ctx.restore();
        //绘制秒针
        ctx.save();
        ctx.strokeStyle = "red";
        ctx.lineWidth = minBorderWidth;
        ctx.translate(dot.x, dot.y);
        ctx.rotate(sec * 6 * Math.PI / 180);
        ctx.beginPath();
        ctx.moveTo(0, -75);
        ctx.lineTo(0, 25);
        ctx.closePath();
        ctx.stroke();
        ctx.beginPath();
        ctx.fillStyle = '#D6231C';
        ctx.arc(0, -75, 6, 0, 2 * Math.PI, true); //绘制秒针针尖的小圆点
        ctx.fill();
        ctx.closePath();
        ctx.restore();
        //装饰时钟中心  两个小圆叠加
        ctx.beginPath();
        ctx.fillStyle = '#982127';
        ctx.arc(dot.x, dot.y, dot.radius, 0, 2 * Math.PI, true);
        ctx.fill();
        ctx.closePath();
    
        ctx.beginPath();
        ctx.fillStyle = '#D6231C';
        ctx.arc(dot.x, dot.y, 2, 0, 2 * Math.PI, true);
        ctx.fill();
        ctx.closePath();
        //再时钟上添加签名
        ctx.fillStyle = "#000";
        ctx.font = "15px Comic Sans MS";
        ctx.fillText("Chal Mine", dot.x - 30, dot.y + 50);
    }
  • 相关阅读:
    希腊字母写法
    The ASP.NET MVC request processing line
    lambda aggregation
    UVA 10763 Foreign Exchange
    UVA 10624 Super Number
    UVA 10041 Vito's Family
    UVA 10340 All in All
    UVA 10026 Shoemaker's Problem
    HDU 3683 Gomoku
    UVA 11210 Chinese Mahjong
  • 原文地址:https://www.cnblogs.com/niubenbit/p/3706722.html
Copyright © 2011-2022 走看看