canvas渐变

来源:互联网 发布:传奇数据库编辑器wzl 编辑:程序博客网 时间:2024/05/05 02:10

渐变

Context对象可以通过createLinearGradient()和createRadialGradient()两个方法创建渐变对象,这两个方法的原型如下:

Object createLinearGradient(x1, y1, x2, y2);

创建一个从(x1, y1)点到(x2, y2)点的线性渐变对象。

Object createRadialGradient(x1, y1, r1, x2, y2, r2);

创建一个从以(x1, y1)点为圆心、r1为半径的圆到以(x2, y2)点为圆心、r2为半径的圆的径向渐变对象。

渐变对象创建完成之后必须使用它的addColorStop()方法来添加颜色,该方法的原型如下:

void addColorStop(position, color);

其中position表示添加颜色的位置,取值范围为[0, 1],0表示起点,1表示终点;color表示添加的颜色,取值可以是任何CSS颜色值。

渐变对象创建并配置完成之后就可以将其赋予Context对象的strokeStyle属性或者fillStyle属性,然后绘制的图形就具有了所需的渐变效果。


首先来完成一个直线渐变的例子:

 

[html] view plain copy
  1.   
  2. << /span>html>  
  3. << /span>body>  
  4. << /span>canvas id="canvas" width="800"height="800">      
  5.          <</span>p>Your browserdoes not support the canvas element!</</span>p>      
  6. < /</span>canvas>      
  7.        
  8. << /span>script type="text/javascript">      
  9. var canvas =document.getElementById("canvas");      
  10. var context =canvas.getContext("2d");      
  11.       
  12.      var lg context.createLinearGradient(0,0, 100, 100); //可以尝试改变这里的参数,你可以获取更多     
  13.         lg.addColorStop(0, '#ff0000');      
  14.         lg.addColorStop(1, '#0000ff');      
  15.         context.strokeStyle lg     
  16.         context.beginPath();  
  17.         context.moveTo(0,0);  
  18.         context.lineTo(300,300)    
  19.         context.stroke();  
  20.       
  21. < /</span>script>      
  22. < /</span>body>  
  23. < /</span>html>  

效果:

 




现在来完成一个颜色垂直对称的矩形:

 

[html] view plain copy
  1.   
  2. << /span>html>  
  3. << /span>body>  
  4. << /span>canvas id="canvas" width="800"height="800">      
  5.          <</span>p>Your browserdoes not support the canvas element!</</span>p>      
  6. < /</span>canvas>      
  7.        
  8. << /span>script type="text/javascript">      
  9. var canvas =document.getElementById("canvas");      
  10. var context =canvas.getContext("2d");      
  11.       
  12.      //画整个矩形的上半部分  
  13.       var lg1 context.createLinearGradient(10,10, 10, 110);   
  14.       lg1.addColorStop(0, '#ff0000');      
  15.       lg1.addColorStop(1, '#0000ff');  
  16.       context.fillStyle lg1 
  17.       context.beginPath();  
  18.       context.fillRect(10,10,210,100);  
  19.       //画整个矩形的下半部分  
  20.       var lg2 context.createLinearGradient(10,110, 10, 210);   
  21.       lg2.addColorStop(0, '#0000ff');      
  22.       lg2.addColorStop(1, '#ff0000');  
  23.       context.fillStyle lg2 
  24.       context.beginPath();  
  25.       context.fillRect(10,110,210,100);  
  26.         
  27.       
  28. < /</span>script>      
  29. < /</span>body>  
  30. < /</span>html>  

效果图:

 



现在来看一个createRadialGradient的例子:

 

[html] view plain copy
  1.   
  2. << /span>html>  
  3. << /span>body>  
  4. << /span>canvas id="canvas" width="800"height="800">      
  5.          <</span>p>Your browserdoes not support the canvas element!</</span>p>      
  6. < /</span>canvas>      
  7.        
  8. << /span>script type="text/javascript">      
  9. var canvas =document.getElementById("canvas");      
  10. var context =canvas.getContext("2d");      
  11.   
  12. var rg =context.createRadialGradient(450, 150, 20, 450, 150, 100);      
  13. rg.addColorStop(0, '#ff0000');      
  14. rg.addColorStop(1, '#0000ff');      
  15. context.fillStyle rg     
  16. context.beginPath();  
  17. context.arc(450,150,100,0,Math.PI*2,true);  
  18. context.fill();  
  19.   
  20. < /</span>script>      
  21. < /</span>body>  
  22. < /</span>html>  

效果图:

 



从三个实验可以看出,渐变的实现其实就是实现一支特殊的画笔(createLinearGradient或者createRadialGradient),但是要注意画笔渐变对象的坐标,需要和将要画的图形的坐标配对,不然,你将不能得到想要的效果。

1 0
原创粉丝点击