使用canvas绘制时钟

简介: 使用canvas绘制时钟

使用canvas绘制时钟

首先创建画布

<canvas id="clock" width="500" height="500" style="background: transparent;"></canvas>

然后设计画布样式

   

var canvas=document.getElementById("clock");
        var cxt=canvas.getContext("2d");
        function drawClock(){
            //获取系统时间
            var date=new Date;
            var hour=date.getHours();
            var min=date.getMinutes();
            var sec=date.getSeconds();
            //清空画布
            cxt.clearRect(0,0,canvas.width,canvas.height);
            var img=new Image();
            img.src="nanchen.png";
            cxt.drawImage(img,40,40,420,420);
            //起始一条路径
            cxt.strokeStyle="#0fffff";
            cxt.lineWidth="10";
            cxt.beginPath();
            cxt.arc(250,250,200,0,Math.PI*2,false);
            cxt.stroke();
            //结束路径
            cxt.closePath();
            cxt.clip();
            //绘制时刻度
            for(var i=0;i<12;i++){
                cxt.save();
            cxt.strokeStyle="yellow";
            cxt.lineWidth="7";
            //设置原点
            cxt.translate(250,250);
            //设置旋转角度
            cxt.rotate(30*i*Math.PI/180);//隔三十度画一个时刻度
            cxt.beginPath();
            cxt.moveTo(0,-195);
            cxt.lineTo(0,-175);
            cxt.stroke();
            cxt.closePath();
            cxt.restore();
            }
            //绘制分刻度  360/60=6
            for(var i=0;i<60;i++){
                cxt.save();
            cxt.strokeStyle="yellow";
            cxt.lineWidth="5";
            //设置原点
            cxt.translate(250,250);
            cxt.rotate(6*i*Math.PI/180);
            cxt.beginPath();
            cxt.moveTo(0,-195);
            cxt.lineTo(0,-185);
            cxt.stroke();
            cxt.closePath();
            //设置旋转角度
            cxt.restore();
            }
            //绘制时针
            cxt.save();
            cxt.strokeStyle="#00ffff";
            cxt.lineWidth="7";
            //设置原点
            cxt.translate(250,250);
            cxt.rotate(hour*30*Math.PI/180);//每小时旋转三十度
            cxt.beginPath();
            cxt.moveTo(0,-130);
            cxt.lineTo(0,10);
            cxt.stroke();
            cxt.closePath();
            cxt.restore();
            //绘制分针
            cxt.save();
            cxt.strokeStyle="#ffff00";
            cxt.lineWidth="5";
            //设置原点
            cxt.translate(250,250);
            cxt.rotate(min*6*Math.PI/180);//每分钟旋转6°
            cxt.beginPath();
            cxt.moveTo(0,-150);
            cxt.lineTo(0,10);
            cxt.stroke();
            cxt.closePath();
            cxt.restore();
            //绘制秒针
            cxt.save();
            cxt.strokeStyle="#f00";
            cxt.lineWidth="3";
            //设置原点
            cxt.translate(250,250);
            cxt.rotate(sec*6*Math.PI/180);
            cxt.beginPath();
            cxt.moveTo(0,-170);
            cxt.lineTo(0,10);
            cxt.stroke();
            cxt.closePath();
           // cxt.restore();
            //美化表盘  中间小圆
            cxt.beginPath();
            cxt.arc(0,0,7,0,Math.PI*2);
            cxt.fillStyle="#ffff00";
            cxt.fill();
            cxt.strokeStyle="#ff0000";
            cxt.stroke();
            cxt.closePath();
            //秒针上的小圆
            cxt.beginPath();
            cxt.arc(0,-140,7,0,Math.PI*2);
            cxt.fillStyle="#ffff00";
            cxt.fill();
            cxt.strokeStyle="#ff0000";
            cxt.stroke();
            cxt.closePath();
            cxt.restore();
        }
        drawClock();
        setInterval(drawClock,1000);

015ce832f74f47d1a12f6f8e2c0439bb.png

效果:

getContext()

getContext() 方法返回一个用于在画布上绘图的环境。

clearRect

clearRect清空画布

drawImage

HTML5中引入新的元素canvas,其drawImage 方法允许在 canvas 中插入其他图像( img 和 canvas 元素) 。drawImage函数有三种函数原型:

drawImage(image, dx, dy)

drawImage(image, dx, dy, dw, dh)

drawImage(image, sx, sy, sw, sh, dx, dy, dw, dh)

第一个参数image可以用HTMLImageElement,HTMLCanvasElement或者HTMLVideoElement作为参数。

dx和dy是image在canvas中定位的坐标值

dw和dh是image在canvas中即将绘制区域(相对dx和dy坐标的偏移量)的宽度和高度值

sx和sy是image所要绘制的起始位置

sw和sh是image所要绘制区域(相对image的sx和sy坐标的偏移量)的宽度和高度值

beginPath()

beginPath() 其实就是告诉画布:“我要开始画草稿了,请把之前的草稿都清除掉。”是的,beginPath()是重新开始新路径,而把之前的路径都清空掉。如果路径没有了,那么我们的stroke()和fill()就无法起作用

arc

arc arc方法是2D画布的一个绘制圆状态的一个方法,arc有六个参数:arc(x, y, r, sAngle, eAngle, counterclockwise);六个参数对应的意思:

x,y表示圆心坐标

r 表示圆的半径

sAngle : 表示开始绘制的角度

eAngle : 表示结束绘制的角度

counterclockwise : 表示顺时针绘制还是逆时针,false = 顺时针,true = 逆时针,默认值是false

stroke()

stroke() 方法会实际地绘制出通过 moveTo() 和 lineTo() 方法定义的路径。默认颜色是黑色。

closePath()

结束路径

clip剪切

clip()使用

Canvas中的clip()方法是裁切区可用于限制图像描绘的区域,具体的用法:

使用Canvas的绘制函数比如,rect()、arc()之类的方法选择好绘图区域

使用clip()函数将该区域(由rect()、arc()方法指定的绘图区域)设定为裁选区

save和restore

save():保存当前的绘图状态。

restore():恢复之前保存的绘图状态。

moveTo

moveTo() 方法把路径移动到画布中的指定点,不创建线条。

ineTo

ineTo() 方法添加一个新点,然后创建从该点到画布中最后指定点的线条(该方法并不会创建线条)。


相关文章
|
6月前
|
前端开发
canvas绘制圆环
canvas绘制圆环
|
6月前
|
移动开发 前端开发 HTML5
使用canvas绘制超炫时钟
使用canvas绘制超炫时钟
30 3
使用canvas绘制超炫时钟
|
6月前
|
缓存 前端开发 JavaScript
canvas详解01-绘制基本图形
canvas详解01-绘制基本图形
105 2
|
前端开发
canvas炫酷转盘时钟
canvas炫酷转盘时钟,拿来即用
78 0
canvas炫酷转盘时钟
|
前端开发
canvas颗粒时钟
使用canvas做一个颗粒时钟,附带动态效果
95 0
canvas颗粒时钟
|
前端开发
canvas绘制五角星
canvas绘制五角星
182 0
|
Java
Swing时钟动画绘制
本文利用Java原生Swing技术绘制一个时钟动画。
129 0
Swing时钟动画绘制
|
前端开发
html:canvas画布绘图简单入门-绘制时钟-3
html:canvas画布绘图简单入门-绘制时钟-3
113 0
html:canvas画布绘图简单入门-绘制时钟-3
|
前端开发
用canvas绘制一个烟花动画
前言 在我们日常开发中贝塞尔曲线无处不在: svg 中的曲线(支持 2阶、 3阶) canvas 中绘制贝塞尔曲线 几乎所有前端2D或3D图形图表库(echarts,d3,three.js)都会使用到贝塞尔曲线 所以掌握贝塞尔曲线势在必得。这篇文章主要是实战篇,不会介绍和贝塞尔相关的知识, 如果有同学对贝塞尔曲线不是很清楚的话:可以查看我这篇文章——深入理解SVG 绘制贝塞尔曲线 第一步我们先创建ctx, 用ctx 画一个二阶贝塞尔曲线看下。二阶贝塞尔曲线有1个控制点,一个起点,一个终点。 const canvas = document.getElementById( 'canvas'
用canvas绘制一个烟花动画
|
前端开发 算法 图形学
用canvas绘制一个曲线动画——深入理解贝塞尔曲线
用canvas绘制一个曲线动画——深入理解贝塞尔曲线
864 0