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绘制简单图形的更多相关文章

  1. Canvas学习:封装Canvas绘制基本图形API

    Canvas学习:封装Canvas绘制基本图形API Canvas Canvas学习   从前面的文章中我们了解到,通过Canvas中的CanvasRenderingContext2D对象中的属性和方 ...

  2. [HTML5] Canvas绘制简单形状

    使用canvas来进行绘画,它像很多其他dom对象一样,有很多属性和方法,操作这些方法,实现绘画 获取canvas对象,调用document.getElementById()方法 调用canvas对象 ...

  3. canvas绘制简单图形

    canvas绘图篇: canvas绘制矩形: <!DOCTYPE html> <html> <head lang="en"> <meta ...

  4. [HTML5] Canvas绘制简单图片

    获取Image对象,new出来 定义Image对象的src属性,参数:图片路径 定义Image对象的onload方法,调用context对象的drawImage()方法,参数:Image对象,x坐标, ...

  5. html5 Canvas绘制图形入门详解

    html5,这个应该就不需要多作介绍了,只要是开发人员应该都不会陌生.html5是「新兴」的网页技术标准,目前,除IE8及其以下版本的IE浏览器之外,几乎所有主流浏览器(FireFox.Chrome. ...

  6. 解决html5 canvas 绘制字体、图片与图形模糊问题

    html5 canvas 绘制字体.图片与图形模糊问题 发生情况 多出现在高dpi设备,这意味着每平方英寸有更多的像素,如手机,平板电脑.当然很多高端台式电脑也有高分辨率高dpi的显示器. canva ...

  7. 怎样用JavaScript和HTML5 Canvas绘制图表

    原文:https://code.tutsplus.com/zh-...原作:John Negoita翻译:Stypstive 在这篇教程中,我将展示用JavaScript和canvas作为手段,在饼状 ...

  8. 使用html5 canvas绘制图片

    注意:本文属于<html5 Canvas绘制图形入门详解>系列文章中的一部分.如果你是html5初学者,仅仅阅读本文,可能无法较深入的理解canvas,甚至无法顺畅地通读本文.请点击上述链 ...

  9. 使用html5 canvas绘制圆形或弧线

    注意:本文属于<html5 Canvas绘制图形入门详解>系列文章中的一部分.如果你是html5初学者,仅仅阅读本文,可能无法较深入的理解canvas,甚至无法顺畅地通读本文.请点击上述链 ...

随机推荐

  1. TODO:Node.js pm2使用方法

    TODO:Node.js pm2使用方法 pm2 是一个带有负载均衡功能的Node应用的进程管理器. 当你要把你的独立代码利用全部的服务器上的所有CPU,并保证进程永远都活着,0秒的重载, PM2是完 ...

  2. PHP分布式中Redis实现Session

    方法一:找到配置文件php.ini,修改为下面内容,保存并重启服务 session.save_handler = redis session.save_path = "tcp://127.0 ...

  3. SpringMVC配置项学习笔记

    1. <mvc:annotation-driven /> <mvc:annotation-driven />是一种简写形式,默认会注册DefaultAnnotationHand ...

  4. let命令

    基本用法 ES6新增了let命令,用来声明变量.它的用法类似于var,但是所声明的变量,只在let命令所在的代码块内有效. 上面代码在代码块之中,分别用let和var声明了两个变量.然后在代码块之外调 ...

  5. 用SQL语句创建四个表并完成相关题目-10月18日更新

    1. 查询Student表中的所有记录的Sname.Ssex和Class列. 2. 查询教师所有的单位即不重复的Depart列. 3. 查询Student表的所有记录. 4. 查询Score表中成绩在 ...

  6. Ado net Source 用法

    Ado net Source 是用于获取数据源的,使用的connection manager是 ado net connection. Ado Net Source 的Data Access Mode ...

  7. LINQ系列:LINQ to SQL Select查询

    1. 查询全部字段 using (NorthwindContext context = new NorthwindContext()) { var expr = context.Products; f ...

  8. Clash Detection

    Clash Detection eryar@163.com Abstract. Clash detection is used for the model collision check. The p ...

  9. Windows下使用Dev-C++开发基于pthread.h的多线程程序

    一.下载Windows版本的pthread 目前最新版本是:pthreads-w32-2-9-1-release.zip. 二.解压pthread到指定目录      我选择的目录是:E:\DEV-C ...

  10. 你真的了解load方法么?(转载)

    本文授权转载,作者:左书祺(关注仓库,及时获得更新:iOS-Source-Code-Analyze) 因为 ObjC 的 runtime 只能在 Mac OS 下才能编译,所以文章中的代码都是在 Ma ...