|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
使得W3C与非正式的WHATWG(网络超文本应用程序技术工作小组)关系开始紧张起来。这些年来,一直是WHATWG肩负起HTML的重责大任。网页制造poluoluo文章简介:HTML5标准引进了良多新特征,个中最使人等候的之一就是canvas元素。HTML5canvas供应了经由过程JavaScript绘制图形的办法,此办法利用复杂但功效壮大。每个canvas元素都有一个"高低文(context)"(设想成画图板上的一页),在个中能够绘制恣意图形。扫瞄器支
HTML5canvas——基础语法
简述
5标准引进了良多新特征,个中最使人等候的之一就是canvas元素。HTML5canvas供应了经由过程JavaScript绘制图形的办法,此办法利用复杂但功效壮大。每个canvas元素都有一个"高低文(context)"(设想成画图板上的一页),在个中能够绘制恣意图形。扫瞄器撑持多个canvas高低文,并经由过程分歧的供应图形绘制功效。供应图形绘制功效。5标准引进了良多新特征,个中最使人等候的之一就是元素。HTML5供应了经由过程JavaScript绘制图形的办法,此办法利用复杂但功效壮大。每个元素都有一个"高低文(context)"(设想成画图板上的一页),在个中能够绘制恣意图形。扫瞄器撑持多个canvas高低文,并经由过程分歧的供应图形绘制功效。
年夜部分的扫瞄器都撑持2Dcanvas高低文——包含Opera,Firefox,Konqueror和Safari。并且某些版本的Opera还撑持3Dcanvas,Firefox也能够经由过程插件情势撑持3Dcanvas:
- 下载撑持3Dcanvas,HTMLvideo和FileI/O的Opera
- 关于Opera3Dcanvas高低文的文章
- 关于Firefox3Dcanvas
高低文的文章
本文先容2Dcanvas
基本和怎样利用基础canvas函数,如线条、外形、图象和笔墨等。为了了解此文章,你最好懂得JavaScript基本常识。
能够点击此处批量下载本文实例代码
canvas基本
创立canvas的办法很复杂,只必要在HTML页面中增加<canvas>元素:- <canvasid="myCanvas"width="300"height="150">Fallbackcontent,incasethebrowserdoesnotsupportCanvas.</canvas>
复制代码 为了能在JavaScript中援用元素,最好给元素设置ID;也必要给canvas设定高度和宽度。
创立好了画布后,让我们来筹办画笔。要在画布中绘制图形必要利用JavaScript。起首经由过程getElementById函数找到canvas
元素,然后初始化高低文。以后可使用高低文API绘制各类图形。上面的剧本在canvas中绘制一个矩形(点击此处检察效果):- //Getareferencetotheelement.varelem=document.getElementById(myCanvas);//Alwayscheckforproperties和methods,tomakesureyourcodedoesntbreak//inotherbrowsers.if(elem&&elem.getContext){//Getthe2dcontext.//Remember:youcanonlyinitializeonecontextperelement.varcontext=elem.getContext(2d);if(context){//Youaredone!Nowyoucandrawyourfirstrectangle.//Youonlyneedtoprovidethe(x,y)coordinates,followedbythewidthand//heightdimensions.context.fillRect(0,0,150,100);}}
复制代码 能够把下面代码安排在文档head部分中,大概放在内部文件中。
2DcontextAPI
先容了怎样创立canvas后,让我们来看看2DcanvasAPI,看看能用这些函数做些甚么。
基础线条
下面的例子中展现了绘制矩形是何等复杂。
经由过程fillStyle和strokeStyle属性能够轻松的设置矩形的添补和线条。色彩值利用办法和十六进制数、()、()和()(若扫瞄器撑持,如Opera
10和Firefox3)。()(若扫瞄器撑持,如Opera10和Firefox3)。()和()(若扫瞄器撑持,如Opera10和Firefox3)。()、()和()(若扫瞄器撑持,如Opera10和Firefox3)。十六进制数、()、()和()(若扫瞄器撑持,如Opera10和Firefox3)。
经由过程fillRect能够绘制带添补的矩形。利用strokeRect能够绘制只要边框没有添补的矩形。假如想扫除部分canvas可使用clearRect。上述三个办法的参数不异:x,y,width,height。前两个参数设定(x,y)坐标,后两个参数设置矩形的高度和宽度。
可使用lineWidth属性改动线条粗细。让我们看看利用了fillRect,
strokeRectclearRect和其他的例子:- context.fillStyle=#00f;//bluecontext.strokeStyle=#f00;//redcontext.lineWidth=4;//Drawsomerectangles.context.fillRect(0,0,150,50);context.strokeRect(0,60,150,50);context.clearRect(30,25,90,60);context.strokeRect(30,25,90,60);
复制代码 此例子最终效果见.
:fillRect,strokeRect和
clearRect最终效果
路径
经由过程canvas路径(path)能够绘制恣意外形。能够先绘制表面,然后绘制边框和添补。创立自界说外形很复杂,利用beginPath()入手下手绘制,然后利用直线、曲线和其他图形绘制你的图形。绘制终了后挪用fill和stroke便可增加添补大概设置边框。挪用closePath()停止自界说图形绘制。
上面是一个绘制三角形的例子:- //Setthestyleproperties.context.fillStyle=#00f;context.strokeStyle=#f00;context.lineWidth=4;context.beginPath();//Startfromthetop-leftpoint.context.moveTo(10,10);//givethe(x,y)coordinatescontext.lineTo(100,10);context.lineTo(10,100);context.lineTo(10,10);//Done!Nowfilltheshape,和drawthestroke.//Note:yourshapewillnotbevisibleuntilyoucallanyofthetwomethods.context.fill();context.stroke();context.closePath();
复制代码 其最终效果见.
:三角形
另外一个较卖力的例子中利用了直线、曲线和圆弧。
拔出图象
drawImage办法同意在canvas中拔出其他图象
(img和canvas元素)。在Opera中能够再canvas中绘制SVG图形。此办法对照庞大,能够有3个、5个或9个参数:
- 3个参数:最基础的drawImage利用办法。一个参数指定图象地位,另两个参数设置图象在canvas中的地位。
- 5个参数:中级的drawImage利用办法,包含下面所述3个参数,加两个参数指明拔出图象宽度和高度(假如你想改动图象巨细)。
- 9个参数:最庞大drawImage杂利用办法,包括上述5个参数外,别的4个参数设置源图象中的地位和高度宽度。这些参数同意你在显现图象前静态裁剪源图象。
上面是上述三个利用办法的例子:- //Threearguments:theelement,destination(x,y)coordinates.context.drawImage(img_elem,dx,dy);//Fivearguments:theelement,destination(x,y)coordinates,anddestination//widthandheight(ifyouwanttoresizethesourceimage).context.drawImage(img_elem,dx,dy,dw,dh);//Ninearguments:theelement,source(x,y)coordinates,sourcewidthand//height(forcropping),destination(x,y)coordinates,anddestinationwidth//andheight(resize).context.drawImage(img_elem,sx,sy,sw,sh,dx,dy,dw,dh);
复制代码 其效果见.
:drawImage最终效果。
像素级操纵
2DContextAPI供应了三个办法用于像素级操纵:createImageData,getImageData,和
putImageData。
ImageData工具保留了图象像素值。每一个工具有三个属性:width,height和
data。data属性范例为CanvasPixelArray,用于贮存width*height*4个像素值。每个像素有RGB值和通明度alpha值(其值为0至
255,包含alpha在内!)。像素的按次从左至右,从上到下,按行存储。
为了更好的了解其道理,让我们来看一个例子——绘制白色矩形- //CreateanImageDataobject.varimgd=context.createImageData(50,50);varpix=imgd.data;//Loopovereachpixel和setatransparentred.for(vari=0;n=pix.length,i<n;i+=4){pix[i]=255;//redchannelpix[i+3]=127;//alphachannel}//DrawtheImageDataobjectatthegiven(x,y)coordinates.context.putImageData(imgd,0,0);
复制代码 注重:不是一切扫瞄器都完成了createImageData。在撑持的扫瞄器中,必要经由过程getImageData办法猎取ImageData工具。请参考示例代码。
经由过程ImageData能够完成良多功效。如能够完成图象滤镜,或能够完成数学可视化(如分形和其他殊效)。上面殊效完成了复杂的色彩反转滤镜:- //GettheCanvasPixelArrayfromthegivencoordinatesanddimensions.varimgd=context.getImageData(x,y,width,height);varpix=imgd.data;//Loopovereachpixelandinvertthecolor.for(vari=0,n=pix.length;i<n;i+=4){pix[i]=255-pix[i];//redpix[i+1]=255-pix[i+1];//greenpix[i+2]=255-pix[i+2];//blue//i+3isalpha(thefourthelement)}//DrawtheImageDataatthegiven(x,y)coordinates.context.putImageData(imgd,x,y);
复制代码 显现了利用此滤镜后的Opera
图象(是原始图片)。
:色彩反转滤镜
笔墨
固然比来的WebKit版本和Firefox3.1nightlybuild才入手下手撑持TextAPI,为了包管文章完全性我决意仍在这里先容笔墨API。
context工具能够设置以下text属性:
- font:笔墨字体,同
font-family属性属性
- textAlign:笔墨程度对齐体例。可取属性值:start,end,left,
right,center。默许值:
start.
- textBaseline:笔墨竖直对齐体例。可取属性值:top,hanging,middle,
alphabetic,ideographic,bottom。默许值:alphabetic.
有两个办法能够绘制笔墨:fillText和strokeText。第一个绘制带fillStyle添补的笔墨,后者绘制只要strokeStyle边框的笔墨。二者的参数不异:要绘制的笔墨和笔墨的地位(x,y)坐标。另有一个可选选项——最年夜宽度。假如必要的话,扫瞄器会缩减笔墨以让它顺应指定宽度。
笔墨对齐属性影响笔墨与设置的
(x,y)坐标的绝对地位。
上面是一个在canvas中绘制"helloworld"笔墨的例子- context.fillStyle=#00f;context.font=italic30pxsans-serif;context.textBaseline=top;context.fillText(Helloworld!,0,0);context.font=bold30pxsans-serif;context.strokeText(Helloworld!,0,50);
复制代码 是其最终效果。
:笔墨效果
暗影
今朝只要Konqueror和Firefox3.1nightlybuild撑持ShadowsAPI。API的属性为:
- shadowColor:暗影色彩。其值和CSS色彩值分歧。
- shadowBlur:设置暗影含混水平。此值越年夜,暗影越含混。其效果和Photoshop的高斯含混滤镜不异。
- shadowOffsetX和shadowOffsetY:暗影的x和y偏移量,单元是像素。
上面是canvas暗影的例子:- context.shadowOffsetX=5;context.shadowOffsetY=5;context.shadowBlur=4;context.shadowColor=rgba(255,0,0,0.5);context.fillStyle=#00f;context.fillRect(20,20,150,100);
复制代码 其效果见。
:canvas暗影效果——蓝色矩形,白色暗影
色彩突变
除CSS色彩,fillStyle和strokeStyle属性能够设置为CanvasGradient工具。——经由过程CanvasGradient能够为线条和添补利用色彩突变。
欲创立CanvasGradient工具,可使用两个办法:createLinearGradient和createRadialGradient。前者创立线性色彩突变,后者创立圆形色彩突变。
创立色彩突变工具后,可使用工具的addColorStop办法增加色彩两头值。
上面的代码演示了色彩突变利用办法:- //Youneedtoprovidethesource和destination(x,y)coordinates//forthegradient(fromwhereitstarts和whereitends).vargradient1=context.createLinearGradient(sx,sy,dx,dy);//Nowyoucanaddcolorsinyourgradient.//Thefirstargumenttellsthepositionforthecolorinyourgradient.The//acceptedvaluerangeisfrom0(gradientstart)to1(gradientend).//Thesecondargumenttellsthecoloryouwant,usingtheCSScolorformat.gradient1.addColorStop(0,#f00);//redgradient1.addColorStop(0.5,#ff0);//yellowgradient1.addColorStop(1,#00f);//blue//Fortheradialgradientyoualsoneedtoprovidesource//和destinationcircleradius.//The(x,y)coordinatesdefinethecirclecenterpoints(start和//destination).vargradient2=context.createRadialGradient(sx,sy,sr,dx,dy,dr);//Addingcolorstoaradialgradientisthesameasaddingcolorstolinear//gradients.
复制代码 我也筹办了一个更庞大的例子,利用了线性色彩突变、暗影和笔墨。其效果见。
:利用线性色彩突变的例子
canvas演示
假如你想晓得利用Canvas能够做些甚么,能够参看以下的工程:
- OperaWidget:
- SimAquarium
- Artists
Sketchbook
- Spirograph
- 在线工程和演示
- Newtonpolynomial
- Canvascape-"3DWalker"
- Paint.Web-painting
demo,open-source
- Star-field
flight
- Interactiveblob
大节
Canvas是HTML5最使人等候的特征之一,今朝已取得年夜部分Web扫瞄器撑持。Canvas能够匡助创立游戏、加强图形用户界面。2Dcontext
API供应大批图形绘制功效——我但愿经由过程本文你懂得了canvas利用,而且你有乐趣懂得更多!
</p>
HTML5开发的网页文档类型极其简单,就够了,记得5年前还在反复跟团队强调使用XHTML那段冗长的文档类型声明. |
|