首页 > 代码库 > 《javascript高级程序设计》笔记(十五)

《javascript高级程序设计》笔记(十五)

使用Canvas绘图

<canvas>元素负责在页面中设定一个区域,然后通过javascript动态地在这个区域绘制图形。IE9+、Safari 2+、Firefox 1.5+、Opera 9+、Chrome都某种程度上支持。

(一)基本用法

使用<canvas>元素必须先设置其width和height属性,出现在开始和结束标签的内容是后备信息,浏览器不支持就会显示。

要在canvas上绘图需要取得绘图上下文,取得绘图上下文对象的引用需要调用getContext()方法并传入上下文的名字。传入"2d"即可。

 <canvas id="drawing" width="200" height="200">Your browser doesn‘t support the canvas tag.</canvas>//javascript var drawing = document.getElementById("drawing"); if (drawing.getContext){       var context = drawing.getContext("2d");}

 

 

先检测getContext()方法是否存在

使用toDataURL()方法可以到处在<canvas>元素上绘制的图像。接收一个参数——图像的MIME类型格式,而且适合用于创建图像的任何上下文。

 var drawing = document.getElementById("drawing"); if (drawing.getContext){                            //取得图像的数据URI                var imgURI = drawing.toDataURL();                                //显示图像                var image = document.createElement("img");                image.src = imgURI;                document.body.appendChild(image);   }

 默认情况下,浏览器将图像编码为PNG格式。

 

(二)2D上下文

2D上下文的坐标开始于<canvas>的左上角,坐标为(0,0),x轴向右,y轴向下。

1.填充和描边

fillStyle:填充

strokeStyle:描边

属性值可以是字符串、渐变对象或模式对象,默认值都是#000000。可以用CSS指定颜色的格式指定颜色。

 

2.绘制矩形

方法:fillRect()、strokeRect()、clearRect()。都接收4个参数:x坐标、y坐标、宽度、高度。

strokeRect()的宽度由lineWidth属性控制,lineCap属性控制线条末端的形状,lineJoin属性控制线条相交的方式。

clear()方法清除画布上的矩形区域。

 

3.绘制路径

先要调用beginPath()方法表示要开始绘制新路径。

arc:以(x,y)为圆心绘制弧线。

arcTo:从上一点开始绘制一条弧线。

bezierCurveTo:从上一点开始绘制一条曲线。

lineTo:从上一点开始绘制一条直线。

moveTo:游标移动到(x,y)。

quadraticCurveTo:从上一点开始绘制一条二次曲线。

rect:从点(x,y)开始绘制矩形。

创建路径后如果想绘制链接到起点的线条可以调用closePath(),fll()方法填充,stroke方法描边,clip方法创建剪切区域。

 

4.绘制文本

fillText() strokeText() 接收4个参数:要绘制的文本字符串、x坐标、y坐标和可选的最大像素宽度。

这两个方法以下面的属性为基础

font:大小、字体。

textAlign:文本对齐方式。

textBaseline:文本的基线。

measureText():接收一个参数,即要绘制的文本,返回width属性。

 

5.变化

rotate(angle):围绕原点选择角度。

scale:(scaleX,scaleY):缩放图像。

translate(x,y):将原点设置为(x,y)。

transform(...):直接修改变化矩阵。

setTransform(...):将变化矩阵设置为默认状态,再调用transform()。

save():将设置放入栈,要回到之前保存的设置可以调用restore()方法,在保存设置的栈中向前返回一级,恢复之前的状态。

 

6.绘制图形

drawImage():把图像绘制到画布。最简单可以只传入HTML<img>元素和起点的x、y坐标。要改变图像的大小可以再传入两个参数指定目标的宽度和高度。

还可以选择把图像的某个区域绘制到上下文,总共需要传入9个参数。

除了传入HTML<img>元素,还可以传入另一个<canvas>元素作为第一个参数。

 

7.阴影

下列属性自动为形状或路径绘制阴影。

shadowColor:阴影颜色,默认为0。

shadowOffsetX:形状或路径x方向的阴影便宜量,默认为0。

shadowOffsetY:形状或路径y方向的阴影便宜量,默认为0。

shadowBlur:模糊的像素,默认为0。

 

8.渐变

createLinearGradient()创建新渐变,返回CanvasGradient对象的实例。接收4个参数:起点x坐标、起点y坐标、终点x坐标、终点y坐标。

addColorStop:指定颜色,接收两个参数:色标位置和CSS颜色值。色标的位置是一个0(开始的颜色)到1(结束的颜色)的数字。

                var context = drawing.getContext("2d"),                    gradient = context.createLinearGradient(30, 30, 70, 70);                                        gradient.addColorStop(0, "white");                gradient.addColorStop(1, "black");

createRadialGradient(): 径向渐变,接收6个参数:两个圆的原型和半径。

 

9.模式

就是重复的图像,可以用来填充或描边图形。

createPattern():创建新模式,传入两个参数:一个HTML<img>元素和一个表示如何重复图像的字符串。第二个参数属性:repeat、repeat-x、repeat-y和no-repeat。

 

10.使用图像数据

getImageData():获取原始图像数据,接收4个参数:画面区域的x和y坐标及宽度和高度,返回对象是有3个属性:width、height和data。data是一个数组,保存每个像素的数据。在data数组中,每一个像素用4个元素来保存,分别代表红、蓝、绿和透明度。

 

11.合成

globalAlpha:指定所有绘制的透明度,值介于0到1,默认是0。

globalCompositionOperation:后绘制的图形怎样与先绘制的图形结合。

 

(三)WebGL

1.类型化数据

2.WebGL上下文

3.支持



《javascript高级程序设计》笔记(十五)