HTML5自学笔记[ 11 ]canvas绘图基础1
html5新增<canvas>标签用于绘制图像,默认宽高是300*150,canvas的宽高需要在这里设置,在css中设置会有问题:设置的形状,如矩形,会等比缩放,而非设置的宽高。
在不支持canvas的浏览器里会显示这行文字,这里的文字颜色要和canvas背景色一致才行:
<canvas id="canvas1" width="1000" height="1000"> <span>该浏览器不支持canvas</span> </canvas>在canvas画布上绘制图像,必须借助JavaScript脚本,JavaScript提供了绘制图像的接口和一系列方法:
var oCanvas = document.getElementById('canvas1'); var oContext = oCanvas.getContext('2d'); //获取绘图的2d环境绘制填充的矩形,默认填充黑色,参数:矩形左上角x坐标、矩形左上角y坐标、矩形宽、矩形高;绘制一个顶点为(50,20)宽为100,高为50的矩形如下:
oContext.fillRect(50,20,100,50);绘制边框矩形,默认边框色为黑色,边框宽度为1px;参数和填充矩形一样;例如下:
oContext.strokeRect(50,20,100,50);注:实际浏览器显示的边框为2px,若要显示1px,就要将起点坐标偏移0.5px;例如下:
oContext.strokeRect(50.5,20.5,100,50);绘制路径所需的方法:
- beginPath() --> 准备开始绘制,如果不写这个方法,就会出问题
- moveTo(x1,y1) --> 画笔移动到起始点
- lineTo(xn,yn) --> 画笔移动到第二个点,多次使用这个方法,可绘制多边形
- closePath() --> 闭合路径,即:将画笔从(xn,yn)移动到起始点,若不写,多边形不闭合
- stroke() --> 绘制若干直线,依次连接(x1,y1)、(x2,y2)...、(xn,yn)
- fill() --> 填充多边形
- fillStyle --> 填充色
- strokeStyle --> 边框颜色
- lineWidth --> 边框线宽
例1.绘制一个任意三角形,不填充:
oContext.beginPath(); 2 oContext.moveTo(100,50); 3 oContext.lineTo(50,100); 4 oContext.lineTo(200,100); 5 oContext.closePath(); 6 oContext.stroke();例2.绘制一个四边形,填充红色:
oContext.beginPath(); oContext.moveTo(100,50); oContext.lineTo(50,100); oContext.lineTo(200,100); oContext.lineTo(300,50); oContext.closePath(); oContext.fillStyle = 'red'; oContext.fill();例3.绘制两条直线:
oContext.beginPath(); oContext.moveTo(100,50); oContext.lineTo(50,100); oContext.lineTo(200,100); oContext.stroke();clearRect:该方法用于清除画布中指定矩形区域内的图形,参数:x/y/w/h:
oContext.clearRct(0,0,oCanvas.width,oCanvas.height);前面说过,如果不写beginPath就会出问题,看下面的例子:
画两个三角形,第一个仅画边框,第二个填充颜色,正确写法如下:
oContext.beginPath(); oContext.moveTo(100,50); oContext.lineTo(50,100); oContext.lineTo(200,100); oContext.closePath(); oContext.stroke(); oContext.beginPath(); oContext.moveTo(100,150); oContext.lineTo(50,200); oContext.lineTo(200,200); oContext.closePath(); oContext.fill();
但是如果第二个不写beginPath,那么fill就找不到第二个三角形的起始点,因此会连同前面的形状一起填充:
oContext.beginPath(); oContext.moveTo(100,50); oContext.lineTo(50,100); oContext.lineTo(200,100); oContext.closePath(); oContext.stroke(); oContext.moveTo(100,150); oContext.lineTo(50,200); oContext.lineTo(200,200); oContext.closePath(); oContext.fill();
如果在绘制第一个三角形前设置填充色,就会作用于后面的每一个填充,如果只想让该设置只作用于第一个形状,那么应该先保存路径save并在开始第二个路径前恢复路径restore:
oContext.save(); oContext.fillStyle = 'red'; oContext.beginPath(); oContext.moveTo(100,50); oContext.lineTo(50,100); oContext.lineTo(200,100); oContext.closePath(); oContext.fill(); oContext.restore(); oContext.beginPath(); oContext.moveTo(100,150); oContext.lineTo(50,200); oContext.lineTo(200,200); oContext.closePath(); oContext.fill();
HTML5自学笔记[ 11 ]canvas绘图基础1的更多相关文章
- HTML5自学笔记[ 17 ]canvas绘图基础4
绘制图像: drawImage(oImg,x,y),oImg是一个Image对象,(x,y)为绘制起点,绘制的图像大小和源图大小一样. drawImage(oImg,x,y,w,h),后两个参数设置绘 ...
- HTML5自学笔记[ 16 ]canvas绘图基础3
canvas还提供提供了一些动态方法,使图像可以旋转.缩放和移动,与css3中的方法一样. 移动:translate(x,y),x和y为横竖方向的偏移量 旋转:rotate(弧度),弧度=角度*Mat ...
- HTML5自学笔记[ 14 ]canvas绘图基础2
canvas绘制路径不仅可以绘制直线和多边形,还提供了绘制曲线的方法,利用这些方法可以画出多种曲线效果. 方法1:arc(x,y,r,起始弧度,结束弧度,绘制方向);其中(x,y)为圆心坐标,r为半径 ...
- HTML5自学笔记[ 23 ]canvas绘图基础7
变换矩阵: transform(a,b,c,d,e,f),多次使用该函数,效果是多次状态改变的累加: setTransform(a,b,c,d,e,f),会忽略之前的变换,从起始状态开始改变.
- HTML5自学笔记[ 15 ]canvas绘图基础6
关于线条的一些属性: lineCap,这个属性表示的是线条两端的样式,值有butt(默认)/round/square. lineJoin,这个属性表示线条相交的方式,值有miter(默认)/bevel ...
- HTML5自学笔记[ 18 ]canvas绘图基础5
获取图像数据:getImgData(x,y,w,h),返回的是一个ImageData对象,这个对象有三个属性保存图像信息:width/height/data.data是一个数组,保存了每个像素的信息, ...
- HTML5自学笔记[ 15 ]canvas绘图实例之钟表
<!doctype html> <html> <head> <meta charset="utf-8"> <title> ...
- HTML5自学笔记[ 13 ]canvas绘图小实例之方块移动
<!doctype html> <html> <head> <meta charset="utf-8"> <title> ...
- HTML5自学笔记[ 12 ]canvas绘图小示例之鼠标画线
<!doctype html> <html> <head> <meta charset="utf-8"> <title> ...
随机推荐
- BZOJ 1488: [HNOI2009]图的同构 polay
题意:两个图AB同构:把A的顶点重新编号后与B一模一样.求n个顶点的图一共有多少个?(同构的算一种) 思路:边有n*(n-1)/2,这些边可以有可以没有,所以等同于边的颜色有两种.然后将n划分成循环节 ...
- HDU 4870 Rating 概率DP
Rating Time Limit:5000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u Submit Statu ...
- Debug不崩溃Release版本崩溃的一种原因
今天有一个工程Debug是正常,Release崩溃,郁闷至极. 研究了一下下午,原因是一个类成员变量没有构造函数中初始化.而Debug版本正好没有问题. 所以定义类成员,一定不能忘记初始化!!
- Metasploit辅助模块
msf > show auxiliary Auxiliary ========= Name Di ...
- 快速查看SQL Server 中各表的数据量以及占用空间大小
快速查看SQL Server 中各表的数据量以及占用空间大小. CREATE TABLE #T (NAME nvarchar(100),ROWS char(20),reserved varchar(1 ...
- swipejs的bug
Github:https://github.com/thebird/Swipe 以下bug的修复方式皆来自于网上. 现在最新的版本是2.0,bug如下: 1.触摸后不会自动播放 修复方式, funct ...
- 让css初学者抓狂的属性float
挣扎了好久,始终没有决定要不要写博客,心里有几个顾虑一是我是小白,我写的文章有没有人看?二是我是小白,我写的文章假如存在诸多错误,理解的不对发表上去再去误导别人.三是写一篇文章费时费力.但是我现在想明 ...
- jquery.validate插件在booststarp中的运用
现在在网络上已经可以找到很多基于bootstarp的表单认证,但是验证的都不全面的,下载后,我们还要理解作者的思路然后进行修改添加,这种修改方式往往适合学习,时间很多的时候.但是我们很多时候是没有时间 ...
- iOS - Swift NSEnumerator 迭代器
前言 public class NSEnumerator : NSObject, NSFastEnumeration 1.迭代器 let arr:NSArray = ["bei", ...
- iOS - NSURLSession 网络请求
前言 NS_CLASS_AVAILABLE(NSURLSESSION_AVAILABLE, 7_0) @interface NSURLSession : NSObject @available(iOS ...

