canvas

江湖上流传开来的除了牛叉的"H5",还有牛叉的canvas应用。

canvas是html5的一部分,当然他们说的H5也并不是html5的意思,只是表示在手机浏览器中,更侠义的是在微信浏览器中打开的酷炫的网页。

曾几何时,我也觉得canvas真的酷爆了,各种什么烟花、酷炫的动画效果、canvas游戏等,都燃烧着我学习的热情。

后来通过学习,多看书,其实canvas并不复杂,要用到的东西也不多。

大概整理一下:

1、绘制基本几何图形

(1)直线

[javascript]  view plain copy
  1. ctx.moveTo(100,200);  
  2. ctx.lineTo(120,300);  
  3. ctx.lineWidth = 10;  
  4. ctx.strokeStyle = '#000';  
  5. ctx.stroke();  

(2)矩形

[html]  view plain copy
  1. ctx.fillRect(0,0,100,100);  

(3)圆形

[javascript]  view plain copy
  1. ctx.arc(200,200,100,0,Math.PI*(1/2),false);     //x,y,半径,起始角度,结束角度,是否逆时针方向  
  2. ctx.stroke();  

(4)三角形(用直线来连接实现)

[javascript]  view plain copy
  1. ctx.moveTo(400,200);  
  2. ctx.lineTo(350,260);  
  3. ctx.lineTo(450,260);  
  4. ctx.lineTo(400,200);  
  5. ctx.lineWidth = 5;  
  6. ctx.strokeStyle = 'blue';  
  7. ctx.fillStyle = 'orange';  
  8. ctx.stroke();  
  9. ctx.fill();  

(5)曲线

[javascript]  view plain copy
  1. ctx.lineWidth = 2;  
  2. ctx.strokeStyle = "#f00";  
  3. ctx.moveTo(10,10);  
  4. ctx.arcTo(210,60,10,210,20);  
  5. ctx.stroke();  

(6) 二次贝塞尔曲线

[javascript]  view plain copy
  1. ctx.lineWidth = 3;  
  2.         ctx.strokeStyle = 'blue';  
  3.         ctx.moveTo(100,100);  
  4.         ctx.quadraticCurveTo(125,225,225,166);  
  5.         ctx.stroke();  

(7) 三次贝塞尔曲线

[javascript]  view plain copy
  1. ctx.moveTo(20,20);  
  2. ctx.bezierCurveTo(20,100,200,100,200,20);  

以上是基本的几何图像绘制方法,虽然简单,但是只要创意好,利用简单的几何图形来组合成复杂的图像,也是很棒的撒。

2、添加图片

有三种画法,函数方法一样,只是参数不同,更多的参数表示更复杂也更多可控制的东西。

[javascript]  view plain copy
  1. var img = new Image();  
  2.         img.src = '1.jpg';  
  3.         img.onload = function(){  
  4.             //第一种画法  
  5.             ctx.drawImage(img,0,0);  
  6.   
  7.             //第二种画法,5 args  
  8.             ctx.drawImage(img,330,0,200,300);  
  9.   
  10.             //第三种画法,9 args  
  11.             ctx.drawImage(img,0,0,320,384,330,320,160,192);  
  12.         }  

3、绘制文字

[javascript]  view plain copy
  1. ctx.font="20px Georgia";  
  2. ctx.fillText("Hello World!",10,50);  
除了使用fillText还可以strokeText,可同时使用之前绘制图形的一些常用方法,比如strokeStyle等。

4、转换(缩放,位移,旋转)

例子:旋转一个矩形

[javascript]  view plain copy
  1. var mycanvas = document.getElementById('mycanvas'),  
  2.             ctx = mycanvas.getContext('2d'),  
  3.             cw = mycanvas.width,  
  4.             ch = mycanvas.height,  
  5.             rw = 100,  
  6.             rh = 50,  
  7.             degree = 0;  
  8.   
  9.           
  10.         setInterval(function(){  
  11.             ctx.clearRect(0,0,cw,ch);  
  12.             ctx.save();  
  13.             ctx.translate(300,300);  
  14.             ctx.rotate(Math.PI/180*(degree++));  
  15.             ctx.fillStyle = '#999';  
  16.             ctx.fillRect(-rw/2,-rh/2,rw,rh);  
  17.             ctx.restore();  
  18.   
  19.         },10);  

5、样式、阴影

设置阴影大小、颜色、偏移量

[javascript]  view plain copy
  1. ctx.shadowBlur=20;  
  2. ctx.shadowColor="black";  
  3. ctx.shadowOffsetX = "10";  
  4. ctx.shadowOffsetY = "20";  

创建并使用线性渐变:

[javascript]  view plain copy
  1. var grd=ctx.createLinearGradient(0,0,170,0);  
  2. grd.addColorStop(0,"black");  
  3. grd.addColorStop(1,"white");  
  4.   
  5. ctx.fillStyle=grd;  
  6. ctx.fillRect(20,20,150,100);  

创建并使用径向渐变:

[javascript]  view plain copy
  1. var grd=ctx.createRadialGradient(75,50,5,90,60,100);  
  2. grd.addColorStop(0,"red");  
  3. grd.addColorStop(1,"white");  
  4.   
  5. ctx.fillStyle=grd;  
  6. ctx.fillRect(10,10,150,100);  
使用背景图片,和css一样,可以设置平铺等属性

[javascript]  view plain copy
  1. var img=document.getElementById("lamp");  
  2. var pat=ctx.createPattern(img,"repeat");  
  3. ctx.rect(0,0,150,100);  
  4. ctx.fillStyle=pat;  
  5. ctx.fill();  

6、合成方法

所谓的合成方法就是两个图像叠加的时候,使用什么样的处理方式,比如覆盖在上面,覆盖的部分颜色的加深还是减淡等:

写了一个测试demo: http://codepen.io/fonglezen/pen/xGPXGW

基本上也就上面这些基本方法和属性了,还有一些其他的方法没有列出来,比如lineCap之类的。

在这些基本方法的基础上,你要做出像样点的东西,还是需要自己的计算能力和图形学能力以及创意。

比如数学里面的物理计算知识(物体运动、碰撞检测等)、图形学里面的颜色(反色,像素数据处理等)、创意(游戏)。

动画才是让canvas活色生香起来的动力。

而canvas并没有提供动画的方法,他需要你自己去写动画的过程。


在canvas中,难点其实在于如何运用你所掌握的数学知识、物理知识、美术、创意等东西,叠加在一起创建酷炫的东西。

比如粒子动画、H5页游等,比如星空、烟花、下雪等。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值