Canvas绘图——2d表
来源:互联网 发布:加工中心手动编程平面 编辑:程序博客网 时间:2024/05/22 00:09
初学JavaScript,用Canvas画一个表。主要用到昨天学的间歇调用(setInterval)。
方法和属性介绍
- context.beginPath()、context.closePath():开始路径和结束路径。通俗讲就像纸上画画的落笔和提笔。
- context.strokeStyle、context.fillStyle:设置边框颜色和填充颜色。
- context.arc(x,y,radius,startAngle,endAngle,anticlockwise):画一个圆。
- context.rotate(angle):旋转,弧度。
- context.translate(x, y):将(x,y)设为原点坐标,即以(x,y)为基准点。
- context.moveTo(x,y)、 context.lineTo(x,y):将笔移动到(x,y),画直线到(x,y)。
- context.stroke()、context.fill():开始绘制边框和绘制颜色。
上述方法和属性加粗的是必用的,其余的可选,根据需求看需要画什么则用什么。 - setInterval = function(code,delay,arguments) {}:这个函数代表每隔几秒运行一次,见JavaScript概览。
代码解析
HTML中:
......<canvas id="c" width="200" height="200">A drawing of something.</canvas><script src="js/clock2d.js"></script>......
clock2d.js中:
声明变量。
var canvas = document.getElementById("c");var context = canvas.getContext("2d");var width = canvas.width;var height = canvas.height;var r = width / 2;
写间歇调用函数。表盘和刻度是静态的,指针是动态的,每秒需要刷新重画,所以代码应该是这样:
setInterval(function () { context.clearRect(0, 0, width, height); // 清空画布所有内容 context.save(); context.translate(width / 2, height / 2); //将画布中心设为原点 drawStatic(); drawDynamic(); context.restore();}, 1000);
写绘制静态表盘函数。由于内表盘和外表盘还有刻度都是圆,所以可以最后重构成一个函数。
function drawStatic() { // 外圆 drawCircle(1, "#000000", "rgba(0, 0, 0, 0)", 0, 0, r * 0.9); // 内圆 drawCircle(1, "#000000", "rgba(0, 0, 0, 0)", 0, 0, r * 0.87); // 刻度点12 drawCircle(1, "#000000", "#000000", 0, -r * 0.80, 2); // 刻度点6 drawCircle(1, "#000000", "#000000", 0, r * 0.80, 2); // 刻度点3 drawCircle(1, "#000000", "#000000", r * 0.80, 0, 2); // 刻度点9 drawCircle(1, "#000000", "#000000", -r * 0.80, 0, 2);}function drawCircle(lineWidth, strokeColor, fillColor, x, y, radius) { context.beginPath(); context.lineWidth = lineWidth; context.strokeStyle = strokeColor; context.fillStyle = fillColor; context.arc(x, y, radius, 0, 2 * Math.PI, false); context.stroke(); context.fill(); context.closePath();}
绘制指针。绘制时针的位置,需要知道是几小时几分,最终都转换成小时,然后计算相应的旋转弧度,绘制分针的位置,需要知道几分几秒,最终都转换成分针,计算相应的弧度,所以也可以重构成同一个函数,只是最终转换的和分度值以及对指针的外观设置不同。
function drawDynamic() { var now = new Date(); // 时针 drawNeedle(now.getHours(), now.getMinutes(), 12, r * 0.5, 3, "#000000"); // 分针 drawNeedle(now.getMinutes(), now.getSeconds(), 60, r * 0.65, 2, "#000000"); // 秒针 drawNeedle(now.getSeconds(), 0, 60, r * 0.7, 1, "#ff0a11");}function drawNeedle(final, rest, scale, length, width, color) { final = final + rest / 60; context.save(); context.beginPath(); context.rotate(2 * Math.PI / scale * final); context.lineWidth = width; context.strokeStyle = color; context.moveTo(0, 0); context.lineTo(0, -length); context.stroke(); context.closePath(); context.restore();}
OK,钟表绘制完成。
阅读全文
0 0
- Canvas绘图——2d表
- HTML5 - canvas 2D绘图
- html5 canvas 2d 绘图学习笔记
- Android 2D绘图(Canvas+paint)详解
- Android 2D绘图解析 Canvas,Paint
- javascript canvas 绘图 2d 渐变 阴影
- Android绘图初步—Canvas
- Android 2D绘图解析之 Canvas,Paint
- Android 2D绘图解析之 Canvas,Paint
- Android 2D绘图解析之 Canvas,Paint
- 第十五章:使用Canvas绘图(2D上下文)
- 说说如何使用 canvas 进行 2D 绘图
- HTML5之Canvas绘图——使用Canvas绘制图形
- 高效canvas绘图框架——zrender
- JavaScript基础——使用Canvas绘图
- 自定义view—绘图基础Canvas+Paint
- canvas的绘图2
- Android中2D绘图工具类(Canvas,Paint和Color)简介
- 你假笨JVM参数分享全整理系列目录(持续更新)
- opencv中HoughLines源码解析
- Spring线程池配置
- Android横竖屏切换
- 2017.08.03
- Canvas绘图——2d表
- 利用类和方法的方式计算矩形周长和面积
- 【干货合集】阿里云专家诠释持续集成与云端交付的正确姿势:在云上如何欢快的用好容器服务?
- Maven多模块工程搭建
- 【清明】最小生成树
- Java实现AD 部门和员工的增删改查
- 一些常见的状态码
- A
- activity四种启动模式讲解