HTML5之canvas细节详谈
1.canvas是HTML5 的新标签,其默认宽高为300*150.
canvas 元素本身是没有绘图能力的。所有的绘制工作必须在 JavaScript 内部完成.
2.canvas图形绘制
在canvas绘制中首先应该提到的是直线绘制,对于一个直线来说,两点确定一条直线,首先必须有一个起点.那么,
问题来了,起点在哪?怎么定义起点?在canvas中有一个虚拟坐标系.如图一:
canvas中定义左上角为(0,0)点,横向为x轴,向左为正,纵向为y轴,向下为负,当然这是相对于没有旋转的情况来说的.
2.1 canvas之直线绘制
在绘制之前必须先从js中获取canvas节点,然后获取canvas内置画笔,画笔分为2d和3d,即平面与立体,对于直线的绘制先从二维入手.如图二:
2.1.1 开始绘制需要调用开始路径函数->设置起点->下一个点->终点
最后需要闭合路径.当然这样还是不够的,因为没有给闭合后的图形填充颜色.这时候就需要2.1.2的填充函数.
注:在每次启用画笔的时候,即调用.beginPath();函数,当绘制的图形完毕的时候记得关闭画笔,即调用.closePath();函数.
stroke(),简而言之,fill()用于实心填充,stroke()用于空心填充(描边,为了具有对比性,之后形象说为空心填充).
先说fill():
在刚才的代码中如果添加
txt.fillStyle = 'yellow';
txt.fill()
;
这两行代码,其效果是这样的,如图三:
图三
如果加上
txt.strokeStyle = 'green';
txt.stroke();
这两行代码,效果是这样的,如图四:
图四
那么,在这里就有一个问题,既然stroke()是用于空心填充,那么填充的默认值是多少?怎么修改填充的值?
如果在函数txt.stroke();的上部加上 txt.lineWidth = 5 ;效果如图五:
图五
则明显宽度改变,所以可以使用txt.lineWidth = number
;这个属性来调节宽度.那么同理可以找到其默认宽度为1像素.
注:该属性只能填写数字类型,数字代表多少像素.
注:部分博友在运行程序的时候发现并不没有出现想要的效果,这就是在js中执行顺序的问题了.注意每次开启画笔函数的时候相当于Photoshop中的图层概念,为了使代码更具有条理性,小编建议一个画笔路径在一次画笔中执行(调用画笔函数和关闭画笔函数成对出现一次为一次画笔,即一个图层);
ps:简述图层概念,可以简单理解为一张透明的纸,当多个绘有图案的图层叠在一起就有图案拼凑的效果,所以在执行的时候一定注意顺序问题,有肯能一些本来处于上面的图案被遮盖在图案下方,这时候就需要检查执行顺序了.
在2.1中已经讲过直线的绘制,直线闭合后,使用填充fill();函数可以实现二维的效果,其实点动成线,线动成面,在canvas画布中实现二维的效果也就是线在变化的效果,同理,线动是因为点在动.
图6
画圆有专门画圆的函数.arc();也就是说用直线绘制的二维图案是直线闭合填充的效果;而画圆和画矩形是定义起始位置所扫过的面积.在绘制圆的函数中,里面一共需要填写五个参数,即,圆心坐标,x,y值,半径,起始角度,终点角度(注:
在这里角度不能写成字符串的形式,与css里设置角度不同,这里的角度需要用Math.PI函数进行转换,Math.PI
相当于180°),最后一个布尔值就是绘制方向.
实现的效果如图9:
与绘制圆不同的是,绘制圆的时候,定义圆心,绘制的起点在圆上,而扇形不同,归纳来说,绘制扇形是需要三条边参与,而绘制圆只需要一条线即可.所以在绘制扇形的时候需要定义起始位置.
其实,矩形绘制和圆形绘制几乎一样,只是调用函数不一样.绘制矩形用到的函数是.strokeRect();在括号里需要填写四个参数,即起始位置(矩形左上角),矩形宽,矩形高;
canvas对于文字的绘制与直线和圆形的还不一样,可以简单地理解为对文字的描边,或者填充.通常情况下,绘制文字和渐变搭配,效果更好.代码如图10:
图10
在这里提两点:
文字描边简单地说就会说空心填充,这里用到一个属性.strokeStyle和一个方法.strokeText(text,x,y,w);其中在方法里需要传入四个参数,即文本,文本起始位置,文本的宽度.
同理,文字填充也用到一个属性和方法,即.fillStyle; .fillText() ;
传入的参数和文字描边一样.
这里重要的就是文字渐变,首要的问题就是文字渐变是怎么实现的?
先看代码,如图12:
在这里需要我哥属性介入,即阴影的颜色,阴影的偏移量,还有模糊度,这个与css中的box-shadow,text-shadow,这两个属性类似.
canvas变化需要提及到平移,旋转,缩放,还有扭曲,为了更好的区分开来,这里只说前三个,最后一个扭曲需要借助于贝瑟尔曲线.
HTML5之canvas细节详谈的更多相关文章
- 用html5的canvas画布绘制贝塞尔曲线
查看效果:http://keleyi.com/keleyi/phtml/html5/7.htm 完整代码: <!DOCTYPE html PUBLIC "-//W3C//DTD XHT ...
- HTML5在canvas中绘制复杂形状附效果截图
HTML5在canvas中绘制复杂形状附效果截图 一.绘制复杂形状或路径 在简单的矩形不能满足需求的情况下,绘图环境提供了如下方法来绘制复杂的形状或路径. beginPath() : 开始绘制一个新路 ...
- HTML5之Canvas时钟(网页效果--每日一更)
今天,带来的是使用HTML5中Canvas标签实现的动态时钟效果. 话不多说,先看效果:亲,请点击这里 众所周知,Canvas标签是HTML5中的灵魂,HTML5 Canvas是屏幕上的一个由Java ...
- HTML5 画布canvas元素
HTML5的canvas元素以及随其而来的编程接口Canvas API应用前景极为广泛.简单地说,canvas元素能够在网页中创建一块矩形区域,这块矩形区域可以成为画布,这其中可以绘制各种图形.可别小 ...
- HTML5 之Canvas绘制太阳系
<!DOCTYPE html> <html> <head> <title>HTML5_Canvas_SolarSystem</title> ...
- HTML5 中canvas支持触摸屏的签名面板
1.前言 最近实在是太忙了,从国庆之后的辞职,在慢慢的找工作,到今天在现在的这家公司上班大半个月了,太多的心酸泪无以言表,面试过程中,见到的坑货公司是一家又一家,好几家公司自己都只是上一天班就走了,其 ...
- 【HTML5】Canvas画布
什么是 Canvas? HTML5 的 canvas 元素使用 JavaScript 在网页上绘制图像. 画布是一个矩形区域,您可以控制其每一像素. canvas 拥有多种绘制路径.矩形.圆形.字符以 ...
- html5 之 canvas 相关知识(一)概念及定义
什么是 Canvas? HTML5 的 canvas 元素使用 JavaScript 在网页上绘制图像. 画布是一个矩形区域,您可以控制其每一像素. canvas 拥有多种绘制路径.矩形.圆形.字符以 ...
- HTML5之Canvas画布
先上代码: <canvas width="1000" height="800">浏览器不支持HTML5!</canvas> <sc ...
随机推荐
- JSON 分析数据格式
2014年4月26日本10:55:15 从三月初开始,并JSON战斗.学校不教怎样做,己..大规模的搜索啊.发表这篇文章,喜欢我和不知道如何开始的新手! 和 XML 如.JSON 也是基于纯文本数据格 ...
- 编写SQL的辅助工具
原文:编写SQL的辅助工具 今天在同事的帮助下,下载了一个工具:ApexSQL edit,可能是我孤陋寡闻,不知道还有这样的好工具,它可以在我键入SQL时,帮助我提示表的名称和列名称.还可以帮助我格式 ...
- 云服务器下ASP.NET Core 1.0环境搭建(包含mono与coreclr)
最近.net core如火如荼,国内这方面环境搭建方面的文档也非常多,但是不少已经是过时的,就算按照那个流程走下去也避免不了一些地方早就不一样了.所以下面我将从头到尾的教大家搭建一次环境,并且成功运行 ...
- C语言练习-学生信息管理系统
题目要求: 学生信息管理系统struct studentInfo{ int id; char name[128]; int age; char sex; int c_score; int cpp_sc ...
- JAVA学习:内部类
一.内部类的访问规则: 1.内部类可以直接访问外部类中的成员,包括私有.格式为外部类名.this 2.外部类要访问内部类,必须建立内部类对象. 代码: class Outer { private in ...
- 算法打基础——顺序统计(找第k小数)
这次主要是讲如何在线性时间下找n个元素的未排序序列中第k小的数.当然如果\(k=1 or k=n\),即找最大最小 数,线性时间内遍历即可完成,当拓展到一般,如中位数时,相关算法就值得研究了.这里还要 ...
- dmp文件导入的方法
1,使用oracle的imp命令导入*.dmp文件 首先要明确知道,使用oracle的imp命令进行导入,要在一个空的数据库下,才是最好的,否则,数据表存在的话,就要先删除数据表中的数据 步骤1:禁用 ...
- jQuery全屏插件Textarea Fullscreen
插件描述 Textarea Fullscreen是一个jquery插件,可以将textarea设置为全屏模式 使用方法 引用jquery.js,jquery.textareafullscreen.js ...
- 里氏替换原则LSP(继承规范)
继承的优点: 1.代码共享,减少创建类的工作量,每个子类都拥有父类的方法和属性. 2.提高代码的重用性. 3.子类可以形似父类,但又异于父类. 4.提高代码的可扩展性,实现父类的方法就可以“为所欲为” ...
- T-SQL查询语句(二):嵌套查询
一个select...From...Where查询语句块可以嵌套在另一个select...From...Where查询块的Where子句中,称为嵌套查询.外层查询称为父查询,主查询.内层查询称为子查询 ...