仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 1786|回复: 9
打印 上一主题 下一主题

[HTML5] 来看看:HTML 5 canvas 基础语法

[复制链接]
精灵巫婆 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-15 23:19:37 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

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>元素:
  1. <canvasid="myCanvas"width="300"height="150">Fallbackcontent,incasethebrowserdoesnotsupportCanvas.</canvas>
复制代码
为了能在JavaScript中援用元素,最好给元素设置ID;也必要给canvas设定高度和宽度。
创立好了画布后,让我们来筹办画笔。要在画布中绘制图形必要利用JavaScript。起首经由过程getElementById函数找到canvas
元素,然后初始化高低文。以后可使用高低文API绘制各类图形。上面的剧本在canvas中绘制一个矩形(点击此处检察效果):
  1. //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和其他的例子:
  1. 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()停止自界说图形绘制。
上面是一个绘制三角形的例子:
  1. //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个参数设置源图象中的地位和高度宽度。这些参数同意你在显现图象前静态裁剪源图象。
上面是上述三个利用办法的例子:
  1. //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在内!)。像素的按次从左至右,从上到下,按行存储。
为了更好的了解其道理,让我们来看一个例子——绘制白色矩形
  1. //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能够完成良多功效。如能够完成图象滤镜,或能够完成数学可视化(如分形和其他殊效)。上面殊效完成了复杂的色彩反转滤镜:
  1. //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"笔墨的例子
  1. 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暗影的例子:
  1. 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办法增加色彩两头值。
上面的代码演示了色彩突变利用办法:
  1. //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那段冗长的文档类型声明.
沙发
发表于 2015-1-17 11:48:33 | 只看该作者
Dreamweaver8中文版(dw)是由Macromedia公司开发的一款所见即所得的网页编辑器。和二维动画设计软件FLASH,专业网页图像设计软件FIREWORKS,并称为“网页三剑客”。
飘飘悠悠 该用户已被删除
板凳
发表于 2015-1-20 18:50:42 | 只看该作者
由CS4 版本开始,则转用WebKit 排版引擎(亦即Google Chrome和Apple Safari浏览器所用的排版引擎)作为网页预览。
小妖女 该用户已被删除
地板
发表于 2015-1-29 15:11:14 | 只看该作者
所见则所得网页编辑器的优点就是直观性,使用方便,容易上手.
莫相离 该用户已被删除
5#
发表于 2015-2-6 02:31:14 | 只看该作者
Dreamweaver是集网页制作和管理网站于一身的所见即所得网页编辑器,在编辑时能同时看到源码和设计界面,非常方便新手学习制作网页。
简单生活 该用户已被删除
6#
发表于 2015-2-15 03:51:46 | 只看该作者
您在所见即所得网页编辑器进行网页制作和在WORD中进行文本编辑不会感到有什么区别,但它同时也存在着致命的弱点。
灵魂腐蚀 该用户已被删除
7#
发表于 2015-3-4 11:20:12 | 只看该作者
您在所见即所得网页编辑器进行网页制作和在WORD中进行文本编辑不会感到有什么区别,但它同时也存在着致命的弱点。
再现理想 该用户已被删除
8#
发表于 2015-3-11 18:51:14 | 只看该作者
使用内容管理系统进行开发并实现快速、精确的浏览器兼容性测试。
兰色精灵 该用户已被删除
9#
发表于 2015-3-19 08:30:37 | 只看该作者
我深感到交流的重要。善于交流的人才是善于学习的人。在整个技术的学习过程中,我总结了四大定律:兴趣、恒心、虚心、时间。
冷月葬花魂 该用户已被删除
10#
发表于 2015-3-27 17:11:23 | 只看该作者
Dreamweaver在所见即所得添加链接时,可以在选中文字后在属性栏中的链接栏中直接输入文件的地址即可。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-5-5 06:06

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表