html5的canvas元素使用方法介绍(画矩形、画折线、圆形)


Posted in HTML / CSS onApril 14, 2014

Canvas一般是指画布,最近对用html5写游戏比较感兴趣,所以简单的用了一下Canvas。

之前接触Canvas是在silverlight和wpf上用到过他,在silverlight上Canvas是一个绝对定位的容器,里面可以放任何控件。我们通过他可以构建画布、图形应用、GIS应用等。

在html5中,canvas是一个新增的标签:

复制代码
代码如下:

<canvas></canvas>

他有基本的html标签的所有属性,一样可以给他设置style。

复制代码
代码如下:

<canvas style="width:400px;height:300px;"></canvas>
<style>
canvas{width:400px;height:400px;background:#000;}
</style>

<canvas></canvas>
他还有一个特定的attribute:

复制代码
代码如下:

<canvas height="300" width="400"></canvas>

这里的height、width与以往的html标签的attribute不同,也与style中的height、width不同,这里主要是指canvas中的坐标范围。而style里的width、height是指canvas实际展示的大小。

比如定义下面的一个canvas:

复制代码
代码如下:

<canvas width="400" height="300" style="width:600px;height:450px;border:1px solid #000;"></canvas>

然后在canvas中画一个坐标为  100、50,大小为200、150的矩形,你会看到实际的效果如下图:

html5的canvas元素使用方法介绍(画矩形、画折线、圆形)

图中 canvas的大小是通过style决定的 600px * 450px,但是填满整个canvas的坐标只是400*300, 对应着括号里的大小。

在canvas中画图是基于坐标的,所以100, 50的坐标转化成了150px,75px的屏幕坐标,矩形的大小也由200*150转换成300px*225px的屏幕大小。

你可以按照下面的代码自己试一试:

复制代码
代码如下:

<!doctype html>
<html></p> <p><body>
<canvas width="400" height="300" style="width:600px;height:450px;border:1px solid #000;"></canvas>
<script>
var context =document.getElementsByTagName("canvas")[0].getContext("2d");
context.fillRect(100,50,200,150);
</script>
</body>
</html>

canvas的还有些其他attribute,还没有去看,他还有一个主要的方法,就是getContext(),这个方法就是获取画图的对象。

通过canvas的dom对象,可以调用getContext("2d")的方法获取对应的画图对象:

var canvas = document.getElementsByTagName("canvas")[0];
var context = canvas.getContext("2d");
在开发者控制台里可以看到这个drawing2d的属性及方法:

html5的canvas元素使用方法介绍(画矩形、画折线、圆形)

包含了fillStyle、stokeStyle、lineCap、font等画笔样式类的属性,fillRect、strokeRect、beginPath、moveTo、lineTo、closePath、stroke、fill、drawImage等画图动作的方法,还有一些其他的一些transfrom、save等方法。

简单说一下我看了的几个属性和方法,其他的需要自己去摸索哦:

fillStyle:填充样式,可以是颜色值的html码 如红色:#ff0000,其他是不是支持css3的更多属性就不知道了

strokeStyle:线条样式

font:字体样式

fillRect:function(x,y,width,height),直接按fillStyle填满一个矩形

strokeRect:function(x,y,width,height),直接按strokeStyle描一个矩形边

beginPath:开始画线,配合moveTo\lineTo\closePath等画折线或多边形

moveTo:function(x,y)将画线起点移动到新的坐标

lineTo:function(x,y)从当前点画的目标点

closePath:从当前点连接到起点

stroke:按照上面的路径按strokeStyle画折线

fill:按上面的路径按fillStyle画矩形

drawImage: function(image,x,y,width,height)将Image对象添加的画布上。注意这里的image对象必须是已经加载完毕的。如 var img = new Image();img.src="test.png";img.onload = function(){/*在这里才能将image添加到画布*/}

可以看下上面画矩形的方法:

复制代码
代码如下:

context.fillRect(100,50,200,150);

画一条折线:

复制代码
代码如下:

context.beginPath();
context.moveTo(10,10);
context.lineTo(10,110);
context.lineTo(110,110);
context.lineTo(110,10);
context.closePath();
context.stroke();

canvas具有绘图的功能,但是在用户交互上似乎比较乏力。拿silverlight的canvas、.NET的Bitmap、html的div与canvas对比了一下:

html5的canvas元素使用方法介绍(画矩形、画折线、圆形)

个人感觉canvas和Bitmap更像,是一个将Bitmap放到浏览器端的一个版本,当然我们可以通过他来实现更多的功能。canvas本身能实现的还是比较少,但是配合现有的其他浏览器端应用的技术肯定能创造出更多好的应用。

HTML / CSS 相关文章推荐
CSS3地图动态实例代码(圆圈向外扩散)
Jun 15 HTML / CSS
css3 旋转按钮 使用CSS3创建一个旋转可变色按钮
Dec 31 HTML / CSS
一款利用html5和css3实现的3D滚动特效的教程
Jan 04 HTML / CSS
CSS3过渡transition效果实例介绍
May 03 HTML / CSS
CSS3实现伪类hover离开时平滑过渡效果示例
Aug 10 HTML / CSS
CSS3 实现弹跳的小球动画
Oct 26 HTML / CSS
详解rem 适配布局
Oct 31 HTML / CSS
HTML5中canvas中的beginPath()和closePath()的重要性
Aug 24 HTML / CSS
html5中 media(播放器)的api使用指南
Dec 26 HTML / CSS
实例讲解使用SVG制作loading加载动画的方法
Apr 05 HTML / CSS
快速实现一个简单的canvas迷宫游戏的示例
Jul 04 HTML / CSS
AmazeUI 列表的实现示例
Aug 17 HTML / CSS
html5图片上传预览示例分享
Apr 14 #HTML / CSS
HTML5 Canvas锯齿图代码实例
Apr 10 #HTML / CSS
HTML5 Canvas旋转动画的2个代码例子(一个旋转的太极图效果)
Apr 10 #HTML / CSS
使用javascript和HTML5 Canvas画的四渐变色播放按钮效果
Apr 10 #HTML / CSS
HTML5的自定义属性data-*详细介绍和JS操作实例
Apr 10 #HTML / CSS
让ie浏览器成为支持html5的浏览器的解决方法(使用html5shiv)
Apr 08 #HTML / CSS
为你的html5网页添加音效示例
Apr 03 #HTML / CSS
You might like
用PHP连接Oracle数据库
2006/10/09 PHP
PHP缩略图等比例无损压缩,可填充空白区域补充色
2011/06/10 PHP
php导入csv文件碰到乱码问题的解决方法
2014/02/10 PHP
PHP页面输出搜索后跳转下一页的处理方法
2016/09/30 PHP
Symfony2针对输入时间进行查询的方法分析
2017/06/28 PHP
TP(thinkPHP)框架多层控制器和多级控制器的使用示例
2018/06/13 PHP
php实现二叉树中和为某一值的路径方法
2018/10/14 PHP
PHP使用ajax的post方式下载excel文件简单示例
2019/08/06 PHP
实现连缀调用的map方法(prototype)
2009/08/05 Javascript
isArray()函数(JavaScript中对象类型判断的几种方法)
2009/11/26 Javascript
qTip2 精致的基于jQuery提示信息插件
2012/02/17 Javascript
JQuery+DIV自定义滚动条样式的具体实现
2013/06/25 Javascript
教你如何使用node.js制作代理服务器
2014/11/26 Javascript
javascript中scrollTop详解
2015/04/13 Javascript
详解PHP中pathinfo()函数导致的安全问题
2017/01/05 Javascript
Node.js使用MySQL连接池的方法实例
2018/02/11 Javascript
node前端开发模板引擎Jade的入门
2018/05/11 Javascript
JavaScript数据结构与算法之二叉树遍历算法详解【先序、中序、后序】
2019/02/21 Javascript
[31:01]2014 DOTA2国际邀请赛中国区预选赛5.21 CNB VS Orenda
2014/05/23 DOTA
仅利用30行Python代码来展示X算法
2015/04/01 Python
python实现一个简单的并查集的示例代码
2018/03/19 Python
python实现数字炸弹游戏
2020/07/17 Python
中国宠物用品商城:E宠商城
2016/08/27 全球购物
NFL加拿大官方网上商店:NHLShop.ca
2019/03/12 全球购物
C#中有没有静态构造函数,如果有是做什么用的?
2016/06/04 面试题
在weblogic中发布ejb需涉及到哪些配置文件
2012/01/17 面试题
《两个铁球同时着地》教学反思
2014/02/13 职场文书
2015年幼儿园元旦游艺活动策划书
2014/12/09 职场文书
初中毕业生自我评价
2015/03/02 职场文书
2015年教师教学工作总结
2015/04/28 职场文书
旗帜观后感
2015/06/08 职场文书
反腐倡廉影片观后感
2015/06/08 职场文书
新兵入伍决心书
2015/09/22 职场文书
2016年国庆节新闻稿范文
2015/11/25 职场文书
教师培训学习心得体会
2016/01/21 职场文书
Mysql Innodb存储引擎之索引与算法
2022/02/15 MySQL