HTML5自学笔记[ 11 ]canvas绘图基础1

时间:2021-08-17 04:47:38

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);

绘制路径所需的方法:

  1. beginPath() --> 准备开始绘制,如果不写这个方法,就会出问题
  2. moveTo(x1,y1) --> 画笔移动到起始点
  3. lineTo(xn,yn) --> 画笔移动到第二个点,多次使用这个方法,可绘制多边形
  4. closePath() --> 闭合路径,即:将画笔从(xn,yn)移动到起始点,若不写,多边形不闭合
  5. stroke() --> 绘制若干直线,依次连接(x1,y1)、(x2,y2)...、(xn,yn)
  6. fill() --> 填充多边形
  7. fillStyle --> 填充色
  8. strokeStyle --> 边框颜色
  9. 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();    

HTML5自学笔记[ 11 ]canvas绘图基础1

但是如果第二个不写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();

HTML5自学笔记[ 11 ]canvas绘图基础1

如果在绘制第一个三角形前设置填充色,就会作用于后面的每一个填充,如果只想让该设置只作用于第一个形状,那么应该先保存路径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的更多相关文章

  1. HTML5自学笔记&lbrack; 17 &rsqb;canvas绘图基础4

    绘制图像: drawImage(oImg,x,y),oImg是一个Image对象,(x,y)为绘制起点,绘制的图像大小和源图大小一样. drawImage(oImg,x,y,w,h),后两个参数设置绘 ...

  2. HTML5自学笔记&lbrack; 16 &rsqb;canvas绘图基础3

    canvas还提供提供了一些动态方法,使图像可以旋转.缩放和移动,与css3中的方法一样. 移动:translate(x,y),x和y为横竖方向的偏移量 旋转:rotate(弧度),弧度=角度*Mat ...

  3. HTML5自学笔记&lbrack; 14 &rsqb;canvas绘图基础2

    canvas绘制路径不仅可以绘制直线和多边形,还提供了绘制曲线的方法,利用这些方法可以画出多种曲线效果. 方法1:arc(x,y,r,起始弧度,结束弧度,绘制方向);其中(x,y)为圆心坐标,r为半径 ...

  4. HTML5自学笔记&lbrack; 23 &rsqb;canvas绘图基础7

    变换矩阵: transform(a,b,c,d,e,f),多次使用该函数,效果是多次状态改变的累加: setTransform(a,b,c,d,e,f),会忽略之前的变换,从起始状态开始改变.

  5. HTML5自学笔记&lbrack; 15 &rsqb;canvas绘图基础6

    关于线条的一些属性: lineCap,这个属性表示的是线条两端的样式,值有butt(默认)/round/square. lineJoin,这个属性表示线条相交的方式,值有miter(默认)/bevel ...

  6. HTML5自学笔记&lbrack; 18 &rsqb;canvas绘图基础5

    获取图像数据:getImgData(x,y,w,h),返回的是一个ImageData对象,这个对象有三个属性保存图像信息:width/height/data.data是一个数组,保存了每个像素的信息, ...

  7. HTML5自学笔记&lbrack; 15 &rsqb;canvas绘图实例之钟表

    <!doctype html> <html> <head> <meta charset="utf-8"> <title> ...

  8. HTML5自学笔记&lbrack; 13 &rsqb;canvas绘图小实例之方块移动

    <!doctype html> <html> <head> <meta charset="utf-8"> <title> ...

  9. HTML5自学笔记&lbrack; 12 &rsqb;canvas绘图小示例之鼠标画线

    <!doctype html> <html> <head> <meta charset="utf-8"> <title> ...

随机推荐

  1. LeetCode&colon;Text Justification

    题目链接 Given an array of words and a length L, format the text such that each line has exactly L chara ...

  2. SQL SERVER表不能修改表结构的处理方法

    SQL SERVER表提示不能修改表结构,这究竟是什么原因呢?下面就为您介绍处理该问题的方法,如果您在SQL SERVER表修改方面遇到过问题,不妨一看. 新装的SQL SERVER 2008,打开原 ...

  3. idea svn 更新覆盖了本地代码

    idea  更新svn代码,覆盖了本地代码,还不能ctr+z怎么办? 下图

  4. dnf命令 (常用总结)

    DNF是新一代的rpm软件包管理器.他首先出现在 Fedora 18 这个发行版中.而最近,它取代了yum,正式成为 Fedora 22 的包管理器. DNF包管理器克服了YUM包管理器的一些瓶颈,提 ...

  5. NodeJS定时任务

    在实际开发项目中,会遇到很多定时任务的工作.比如:定时导出某些数据.定时发送消息或邮件给用户.定时备份什么类型的文件等等 一般可以写个定时器,来完成相应的需求,在node.js中自已实现也非常容易,接 ...

  6. 非root用户sudo&lowbar;ssh免密钥

    非root用户sudo_ssh免密钥 目标:从服务器上ssh登陆后sudo免密钥执行相应的命令 环境介绍: 192.168.65.130 web224 # 步骤一: # 每个节点执行(不是必须,但是建 ...

  7. java转义字符处理——&OpenCurlyDoubleQuote;&bsol;&bsol;”替换为&OpenCurlyDoubleQuote;&sol;”

    replaceAll("\\\\", "/"); 例如 //获取项目路径,并将\转换为/ File directory = new File("&qu ...

  8. 【大数据之数据仓库】kudu性能测试报告分析

    本文由  网易云发布. 这篇博文主要的内容不是分析说明kudu的性能指标情况,而是分析为什么kudu的scan性能会这么龊!当初对外宣传可是加了各种 逆天黑科技的呀:列独立存储.bloom filte ...

  9. 三个实例演示 Java Thread Dump 日志分析(转)

    原文链接:http://www.cnblogs.com/zhengyun_ustc/archive/2013/01/06/dumpanalysis.html 转来当笔记^_^ jstack Dump ...

  10. 第四章 Spring&period;Net 如何管理您的类&lowbar;&lowbar;&lowbar;让对象了解自己的容器

    我们在开发中,经常需要让对象了解自己所在的容器的信息,例如,有时我们需要让对象知道,对象所在容器的引用是什么,或者是对象在容器中的名称是什么 .Spring.Net 中提供了两个接口,我们使用这两个接 ...