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. 《Entity Framework 6 Recipes》中文翻译系列 (8) -----第二章 实体数据建模基础之继承关系映射TPT

    翻译的初衷以及为什么选择<Entity Framework 6 Recipes>来学习,请看本系列开篇 2-8 Table per Type Inheritance 建模 问题 你有这样一 ...

  2. js浏览器对象模型-BOM

    bom browse object model 浏览器对象模型. 也就是window对象下面的东西. location 对象 window.location.href 表示打开窗口的路径. windo ...

  3. 我所理解的Cocos2d-x

    我所理解的Cocos2d-x(完全基于Cocos2d-x3.0,深度剖析计算机图形学,OpenGL ES及游戏引擎架构,全面提升游戏开发相关知识) 秦春林 著   ISBN 978-7-121-246 ...

  4. Spring学习记录(三)---bean自动装配autowire

    Spring IoC容器可以自动装配(autowire)相互协作bean之间的关联关系,少写几个ref autowire: no ---默认情况,不自动装配,通过ref手动引用 byName---根据 ...

  5. Ajax_05之跨域请求

    1.跨域请求: Cross Domain Request:跨域名的HTTP请求,浏览器从某个域名下的资源访问了另一域名下的另一资源(协议.域名或是端口号不同): ①浏览器允许跨域请求的情形:  < ...

  6. Entity Framework Core 1.1 Preview 1 简介

    实体框架核心(EF Core)是Entity Framework的一个轻量级,可扩展和跨平台版本. 10月25日,Entity Framework Core 1.1 Preview 1发布了. 升级到 ...

  7. 数据库的Disk Space usage

    SQL Server占用的存储空间,包含数据库file占用的存储空间,数据库对象占用的存储空间. 一,数据库file占用的存储空间 1,使用 sys.master_files 查看数据库中各个file ...

  8. 实战MEF(2):导出&导入

    上一文中,我们大致明白了,利用MEF框架实现自动扫描并组装扩展组件的思路.本文我们继续前进,从最初的定义公共接口开始,一步步学会如何使用MEF. 在上一文中我们知道,对于每一个实现了公共规范的扩展组件 ...

  9. Android 文件读写

    一.分类 文件读写作为Android四大数据存储方式之一,又分为内部存储和外部存储两种: (1)内部存储(Internal storage): 总是可用. 文件默认情况存储在/data/data/包名 ...

  10. String,StringBuffer与StringBuilder的区别??

    转自http://blog.csdn.net/rmn190/article/details/1492013 String 字符串常量 StringBuffer 字符串变量(线程安全) StringBu ...