学习笔记:HTML5 Canvas绘制简单图形
HTML5 Canvas绘制简单图形
1.添加Canvas标签,添加id供js操作。
<canvas id="mycanvas" height="700" width="1024" style="border:1px solid #aaa;text-align:center;">
你的浏览器不支持Canvas,请更新浏览器再试!!!
</canvas>
在canvas标签之间应该做浏览器是否支持的检测,如果浏览器支持canvas,标签首尾之间的这段文字会直接被忽略的。当然实际工作中应该不只是这么一句简单提示就可以了。
2.获取context,调用moveTo(),lineTo(),stroke()方法绘制线。
var canvas =document.getElementById("mycanvas");
//canvas.height=700;
//canvas.width=1024;
var context=canvas.getContext("2d");//2d画布
if(!context)
{
alert("你的浏览器不支持Canvas,请更新浏览器再试!!!");
return;
}
context.moveTo(100,100);//画笔起点
context.lineTo(500,500);//从上一点将要绘制的终点
context.lineWidth=3;//线条宽度
context.strokeStyle="red";//线条颜色
//canvas绘制是基于状态的,上面的代码只是定义了canvas将要绘制什么
//所以代码执行这里,画布上还没有实际绘制任何元素
context.stroke();//开始绘制

tips:
定义画布的宽高可以直接在html元素中通过height,width属性设置,也可能在js中通过canvas对象属性设置,而不是通过css设置。
计算机中关于坐标的定义,右上角为原点(0,0),水平向右x增大(x,0),垂直向下y增大(0,y)。
3.接下来,绘制一个简单的三角形
context.moveTo(100,100);//画笔起点
context.lineTo(500,500);//从上一点将要绘制的终点
context.lineTo(100,500);//从上一点将要绘制的终点
context.lineTo(100,100);//从上一点将要绘制的终点
context.lineWidth=3;//线条宽度
context.strokeStyle="red";//线条颜色
//canvas绘制是基于状态的,上面的代码只是定义了canvas将要绘制什么
//所以代码执行这里,画布上还没有实际绘制任何元素
context.stroke();//开始绘制
绘制三角形
tips:
只要让我们的最后一点与起始点坐标相同,就可以简单给出的一个封闭的多边形。

4.closePath()绘制闭合多边形
前面我们学习过通过起止点坐标相同绘制闭合多边形,我们还可以利用closePath()绘制闭合多边形。
context.moveTo(100,100);//画笔起点
context.lineTo(500,500);//从上一点将要绘制的终点
context.lineTo(100,500);//从上一点将要绘制的终点
//context.lineTo(100,100);//从上一点将要绘制的终点
context.lineWidth=3;//线条宽度
context.strokeStyle="red";//线条颜色
context.closePath();//闭合路径
//canvas绘制是基于状态的,上面的代码只是定义了canvas将要绘制什么
//所以代码执行这里,画布上还没有实际绘制任何元素
context.stroke();//开始绘制
5.连续绘制多个图形。
接下来我们在之前的红色三角形的旁边再来绘制一黑色的线条。代码如下:
context.moveTo(100,100);//画笔起点
context.lineTo(500,500);//从上一点将要绘制的终点
context.lineTo(100,500);//从上一点将要绘制的终点
context.lineTo(100,100);//从上一点将要绘制的终点
context.lineWidth=3;//线条宽度
context.strokeStyle="red";//线条颜色
//canvas绘制是基于状态的,上面的代码只是定义了canvas将要绘制什么
//所以代码执行这里,画布上还没有实际绘制任何元素
context.stroke();//开始绘制
//第二个图形
context.moveTo(200,100);//画笔起点
context.lineTo(600,500);
context.strokeStyle="#000";//线条颜色
context.stroke();//开始绘制
绘制多个图形1

我们发现了什么?两个图形的确出来了,但是并没有按我指定的颜色着色。
正如前面提到的canvas绘图是基于状态的,所以在第二次调用stroke()的时候,会将strokeStyle="#000"应用到第一个三角形中。这时候我们需要借助beginPath()方法。
context.moveTo(100,100);//画笔起点
context.lineTo(500,500);//从上一点将要绘制的终点
context.lineTo(100,500);//从上一点将要绘制的终点
context.lineTo(100,100);//从上一点将要绘制的终点
context.lineWidth=3;//线条宽度
context.strokeStyle="red";//线条颜色
//canvas绘制是基于状态的,上面的代码只是定义了canvas将要绘制什么
//所以代码执行这里,画布上还没有实际绘制任何元素
context.stroke();//开始绘制
//第二个图形
context.beginPath();//表示即将开始新的路径绘制 context.moveTo(200,100);//画笔起点
context.lineTo(600,500);
context.strokeStyle="#000";//线条颜色
context.stroke();//开始绘制
绘制多个图形2

6.利用fill()方法绘制填充形状。
context.moveTo(100,100);//画笔起点
context.lineTo(500,500);//从上一点将要绘制的终点
context.lineTo(100,500);//从上一点将要绘制的终点
context.lineTo(100,100);//从上一点将要绘制的终点
context.lineWidth=3;//线条宽度
context.strokeStyle="red";//线条颜色
//canvas绘制是基于状态的,上面的代码只是定义了canvas将要绘制什么
//所以代码执行这里,画布上还没有实际绘制任何元素
context.stroke();//开始绘制 context.fillStyle="green";//填充颜色
context.fill();//开始填充
//第二个图形
context.beginPath();//表示即将开始新的路径绘制 context.moveTo(200,100);//画笔起点
context.lineTo(600,500);
context.strokeStyle="#000";//线条颜色
context.stroke();//开始绘制
绘制填充图形

7.半成品扩展Demo
<html>
<head>
<title>你好</title>
</head>
<body onload="onload()">
<canvas id="mycanvas" height="700" width="1024" style="border:1px solid #aaa;text-align:center;">
你的浏览器不支持Canvas,请更新浏览器再试!!!
</canvas>
<script type="text/javascript">
function onload(){
var canvas =document.getElementById("mycanvas");
//canvas.height=700;
//canvas.width=1024;
var context=canvas.getContext("2d");//2d画布
if(!context)
{
alert("你的浏览器不支持Canvas,请更新浏览器再试!!!");
return;
}
var paths=[
{
path:[
{x:0,y:0},
{x:200,y:200},
{x:0,y:400}],
fill:"#005588"
},{
path:[
{x:0,y:0},
{x:200,y:200},
{x:400,y:0}],
fill:"green"
},{
path:[
{x:0,y:400},
{x:400,y:400},
{x:400,y:0}],
fill:"yellow"
}
]
for(var i=0;i<paths.length;i++)
{
Draw(paths[i],context);
}
}
function Draw(objPath,context){ var path=objPath["path"];
var fillStyle=objPath["fill"]; context.beginPath();//开始一段新路径
context.moveTo(path[0]["x"],path[0]["y"]);
for(var i=1;i<path.length;i++)
{
context.lineTo(path[i]["x"],path[i]["y"]);
}
context.closePath();//结束当前路径,并强制封闭路径
context.fillStyle=fillStyle;//填充颜色
context.fill();//开始填充
context.lineWidth=1;//线宽
context.strokeStyle="red";//线条着色
context.stroke();//开始绘制路径
}
</script>
</body>
</html>
半成品Demo
学习笔记:HTML5 Canvas绘制简单图形的更多相关文章
- Canvas学习:封装Canvas绘制基本图形API
Canvas学习:封装Canvas绘制基本图形API Canvas Canvas学习 从前面的文章中我们了解到,通过Canvas中的CanvasRenderingContext2D对象中的属性和方 ...
- [HTML5] Canvas绘制简单形状
使用canvas来进行绘画,它像很多其他dom对象一样,有很多属性和方法,操作这些方法,实现绘画 获取canvas对象,调用document.getElementById()方法 调用canvas对象 ...
- canvas绘制简单图形
canvas绘图篇: canvas绘制矩形: <!DOCTYPE html> <html> <head lang="en"> <meta ...
- [HTML5] Canvas绘制简单图片
获取Image对象,new出来 定义Image对象的src属性,参数:图片路径 定义Image对象的onload方法,调用context对象的drawImage()方法,参数:Image对象,x坐标, ...
- html5 Canvas绘制图形入门详解
html5,这个应该就不需要多作介绍了,只要是开发人员应该都不会陌生.html5是「新兴」的网页技术标准,目前,除IE8及其以下版本的IE浏览器之外,几乎所有主流浏览器(FireFox.Chrome. ...
- 解决html5 canvas 绘制字体、图片与图形模糊问题
html5 canvas 绘制字体.图片与图形模糊问题 发生情况 多出现在高dpi设备,这意味着每平方英寸有更多的像素,如手机,平板电脑.当然很多高端台式电脑也有高分辨率高dpi的显示器. canva ...
- 怎样用JavaScript和HTML5 Canvas绘制图表
原文:https://code.tutsplus.com/zh-...原作:John Negoita翻译:Stypstive 在这篇教程中,我将展示用JavaScript和canvas作为手段,在饼状 ...
- 使用html5 canvas绘制图片
注意:本文属于<html5 Canvas绘制图形入门详解>系列文章中的一部分.如果你是html5初学者,仅仅阅读本文,可能无法较深入的理解canvas,甚至无法顺畅地通读本文.请点击上述链 ...
- 使用html5 canvas绘制圆形或弧线
注意:本文属于<html5 Canvas绘制图形入门详解>系列文章中的一部分.如果你是html5初学者,仅仅阅读本文,可能无法较深入的理解canvas,甚至无法顺畅地通读本文.请点击上述链 ...
随机推荐
- TODO:MongoDB MySQL数据库备份
TODO:MongoDB MySQL数据库备份 1. MongoDB使用命令备份 mongodump进行整个数据库备份,主要用到的命令参数: -d 要备份的数据库 -o 输出的路径 ./mongodu ...
- Docker实践:安装wordpress
本文将示例如何使用Docker来安装wordpress.使用三种方法: 1.基于官方的wordpress镜像使用docker run实现: 2.基于官方的wordpress镜像使用fig命令编排工具实 ...
- Android笔记——提升ListView的运行效率
之所以说 ListView 这个控件很难用,就是因为它有很多的细节可以优化,其中运行效率就是很重要的一点.目前我们ListView 的运行效率是很低的,因为在 FruitAdapter 的getVie ...
- 数据库的Disk Space usage
SQL Server占用的存储空间,包含数据库file占用的存储空间,数据库对象占用的存储空间. 一,数据库file占用的存储空间 1,使用 sys.master_files 查看数据库中各个file ...
- [C#]想说一说嵌套数组
今天早上,随感而发,随便写了点东西.结果下午的时候看了看评论,吓我一跳.估计是不是写代码的人看散文看得太少了,还是因为现在的人读的书太少了,似乎有有些大惊小怪. 关于Y美女,我声明一下,尽管她很脱俗, ...
- 关于HTML5 Audio线程问题
移动端果然很坑! 在移动端IOS平台上用new Audio每次调用这个API都会创建一个新的线程,而且还不能销毁...直到拖死应用 后来改进了换了AudioContext,线程问题解决了 https: ...
- OpenCASCADE Performance Test
OpenCASCADE Performance Test eryar@163.com Abstract. Use the Draw Test Harness to test the performan ...
- vue小总结
以下是我在使用vue过程中自己对vue的一些小总结,希望对学习vue的亲们能有所帮助: 1. http的post请求: this.$http({url: '/someUrl', method: ' ...
- Jenkins+SVN+tomcat持续集成发布
有代码更新后重新打包到tomcat再发布,是不是很烦? 看了下面的东西你就不会烦了. SVN或者git等代码版本控制工具不说了,如果是本地开发,也可以安装一个svn server端 jenkins下载 ...
- iOS开发之遍历Model类的属性并完善使用Runtime给Model类赋值
在上篇博客<iOS开发之使用Runtime给Model类赋值>中介绍了如何使用运行时在实体类的基类中添加给实体类的属性赋值的方法,这个方法的前提是字典的Key必须和实体类的Property ...