canvas动画时钟
来源:互联网 发布:mac如何剪切复制 编辑:程序博客网 时间:2024/05/16 12:34
在html代码中,插入canvas标签
<canvas id="dialCanvas"></canvas><canvas id="handCanvas"></canvas>
position:absolute;left:50%;top:50%;transform:translate(-50%, -50%);
写入了两个画布,一个是为了画静态的表盘,另一个是为了画动态的指针
在js中创建画布,进行相关的初始化设置
var width = 600; var height = 600;var dialRadius = 200; //表盘半径var cx = width / 2;var cy = height / 2;//获取canvasvar dialCanvas = document.getElementById("dialCanvas");var handCanvas = document.getElementById("handCanvas");//设置画布大小dialCanvas.width = width;dialCanvas.height = height;handCanvas.width = width;handCanvas.height = height;//获取绘图环境var dialCxt = dialCanvas.getContext("2d");var handCxt = handCanvas.getContext("2d");
绘制表盘
dialCtx.beginPath();dialCtx.arc(dialX,dialY,dialRadius,0,Math.PI*2);dialCtx.lineWidth=10;dialCtx.stroke();
各个参数的含义
/**
*绘制刻度的函数
@param object ctx
@param number cx 圆心x坐标
@param number cy 圆心y坐标
@param number inenrRadius 内半径
@param number outerradius 外半径
@param string stroke 刻度颜色
@param number strokeWidth 刻度宽度
@param number numScales 刻度数量
*/
function drawScale(ctx,cx,cy,outerRadius,innerRadius,scaleCount,scaleWidth,scaleColor){ctx.beginPath();var angle=0;var changeAngle=Math.PI*2/scaleCount;for(var i=0;i<scaleCount;i++){var x1=Math.cos(angle)*outerRadius+cx;var y1=Math.sin(angle)*outerRadius+cy;var x2=Math.cos(angle)*innerRadius+cx;var y2=Math.sin(angle)*innerRadius+cy;ctx.moveTo(x1,y1);ctx.lineTo(x2,y2);angle+=changeAngle;}ctx.strokeStyle=scaleColor;ctx.lineWidth=scaleWidth;ctx.stroke();}
1、绘制小时的刻度
drawScale(dialCtx, dialX, dialY, dialRadius, dialRadius-20, 12, 10, "#000");
drawScale(dialCtx, dialX, dialY, dialRadius, dialRadius-10, 60, 5, "#000");
表盘大致画好了,刻度也画好了,接下来就是绘制指针并让它指向正确的时间,是不是?不就就是画一条直线么。关键是指针rotate的角度是多少呢?其实也是比较简单的。获取当前的时间就好了。
先封装画指针的函数吧
各个参数的含义
/**
* 绘制指针
* @params object ctx
* @params number cx 表盘圆心坐标
* @params number cy 表盘圆心坐标
* @params number angle 旋转的度数(弧度)
* @params number handLength 指针长度
* @params string stroke 指针颜色
* @params number strokeWidth 指针粗细度
*/
function drawHand(ctx, cx, cy, angle, handWidth, handLength, handColor){ctx.save();ctx.translate(cx,cy);ctx.rotate((angle-90)/180*Math.PI);ctx.beginPath();ctx.moveTo(-20,0);ctx.lineTo(handLength,0);ctx.strokeStyle=handColor;ctx.lineWidth=handWidth;ctx.stroke();ctx.restore();}
function runTime(){//获取当前时间var date = new Date();var s = date.getSeconds();var m = date.getMinutes() + s / 60;var h = date.getHours() + m / 60;//清除屏幕handCxt.clearRect(0,0,width,height);//绘制秒针drawHand(handCxt, cx, cy, s / 60 * Math.PI * 2, 180, "red", 2);//绘制分针drawHand(handCxt, cx, cy, m / 60 * Math.PI * 2, 150, "#000", 5);//绘制时针drawHand(handCxt, cx, cy, h / 12 * Math.PI * 2, 120, "#000", 8);setTimeout(runTime, 1000);}
调用定时函数
runTime();
阅读全文
0 0
- canvas动画时钟
- canvas 动画制作——时钟
- HTML5 Canvas粒子数字时钟动画
- Canvas时钟
- canvas时钟
- canvas时钟
- Canvas时钟
- Canvas 时钟
- Canvas时钟
- Canvas--时钟
- Canvas时钟
- Canvas时钟
- canvas--时钟
- 【html5】如何用HTML5中的canvas制作动画时钟呢?
- HTML5-炫丽的时钟效果Canvas绘图与动画
- HTML5-炫丽的时钟效果Canvas绘图与动画
- 使用canvas元素绘制指针式动画时钟
- 动画时钟。。。
- Using VMware convert duplication phyical linux to virtual machine
- 关于Adaboos选择最优弱分类器过程的理解
- 一些重要的 Docker 命令
- ng-modal
- Android小问题的修改
- canvas动画时钟
- PyObject_CallObject 不运行,返回NULL
- ubuntu常用操作
- 朱熹《劝学文》
- ios 超出父控件区域支持点击事件
- android u盘两种方式使用(广播和挂载)
- 1.springboot注解详解
- LeetCode题库——LongestSubstringWithoutRepeatingCharacters
- 成为一名推荐系统工程师永远都不晚