×

H5之Canvas绘制时指定颜色

作者:Terry2017.10.08来源:Web前端之家浏览:10757评论:0
关键词:html5svg

H5之Canvas绘制图形,并且设置图形的颜色和透明度,这个功能在canvas很常用,今天分享点相关的知识。我们知道黑色是Canvas绘制的默认色彩,要想换一种颜色的话,就得在实际画之前指定颜色。

ctx.strokeStyle = color
指定绘制线的颜色:
ctx.fillStyle = color

指定填充的颜色:
来看看实际的例子:

JavaScript

onload = function() {  
 draw();  
};  
function draw() {  
 var canvas = document.getElementById('c1');  
 if ( ! canvas || ! canvas.getContext ) { return false; }  
 var ctx = canvas.getContext('2d');  
 ctx.beginPath();  
 ctx.fillStyle = 'rgb(192, 80, 77)'; // 红 
 ctx.arc(70, 45, 35, 0, Math.PI*2, false);  
 ctx.fill();  
 ctx.beginPath();  
 ctx.fillStyle = 'rgb(155, 187, 89)'; // 绿 
 ctx.arc(45, 95, 35, 0, Math.PI*2, false);  
 ctx.fill();  
 ctx.beginPath();  
 ctx.fillStyle = 'rgb(128, 100, 162)'; // 紫 
 ctx.arc(95, 95, 35, 0, Math.PI*2, false);  
 ctx.fill();  
}

效果如下图:
2016325112217008.png (142×142)

指定透明度

和普通的CSS中一样,我们指定颜色的时候还可以带一个alpha值(不过用的不多,IE9之前都不支持)。看代码:

onload = function() {  
 draw();  
};  
function draw() {  
 var canvas = document.getElementById('c1');  
 if ( ! canvas || ! canvas.getContext ) { return false; }  
 var ctx = canvas.getContext('2d');  
 ctx.beginPath();  
 ctx.fillStyle = 'rgba(192, 80, 77, 0.7)'; // 
 ctx.arc(70, 45, 35, 0, Math.PI*2, false);  
 ctx.fill();  
 ctx.beginPath();  
 ctx.fillStyle = 'rgba(155, 187, 89, 0.7)'; // 
 ctx.arc(45, 95, 35, 0, Math.PI*2, false);  
 ctx.fill();  
 ctx.beginPath();  
 ctx.fillStyle = 'rgba(128, 100, 162, 0.7)'; // 
 ctx.arc(95, 95, 35, 0, Math.PI*2, false);  
 ctx.fill();  
}

结果就是下面这样:

2016325112248089.png (142×142)

和上面的代码基本没变化,就是把rgb(r, g, b)变成了rgba(r, g, b, a)而已,a的值也是0~1,0表示完全透明,1则是完全不透明(所以alpha的值实际上是“不透明度”)。

全局透明globalAlpha

这个也是很简单的一个属性,默认值为1.0,代表完全不透明,取值范围是0.0(完全透明)~1.0。这个属性与阴影设置是一样的,如果不想针对全局设置不透明度,就得在下次绘制前重置globalAlpha。

总结一下:基于状态的属性有哪些?

——globalAlpha

——globalCompositeOpeartion

——strokeStyle

——textAlign,textBaseline

——lineCap,lineJoin,lineWidth,miterLimit

——fillStyle

——font

——shadowBlur,shadowColor,shadowOffsetX,shadowOffsetY
我们通过一个代码,来体验一下globalAlpha的神奇之处~

window.onload = function(){  
       var canvas = document.getElementById("canvas");  
       canvas.width = 800;  
       canvas.height = 600;  
       var context = canvas.getContext("2d");  
       context.fillStyle = "#FFF";  
       context.fillRect(0,0,800,600);  
 
       context.globalAlpha = 0.5;  
 
       for(var i=0; i<=50; i++){  
           var R = Math.floor(Math.random() * 255);  
           var G = Math.floor(Math.random() * 255);  
           var B = Math.floor(Math.random() * 255);  
 
           context.fillStyle = "rgb(" + R + "," + G + "," + B + ")";  
 
           context.beginPath();  
           context.arc(Math.random() * canvas.width, Math.random() * canvas.height, Math.random() * 100, 0, Math.PI * 2);  
           context.fill();  
       }  
   };

运行结果:

2016325112320763.jpg (850×500)

是不是非常的酷?终于有点艺术家的范儿了吧。


您的支持是我们创作的动力!
温馨提示:本文作者系Terry ,经Web前端之家编辑修改或补充,转载请注明出处和本文链接:
https://www.jiangweishan.com/article/svg234234234.html

网友评论文明上网理性发言 已有0人参与

发表评论:

最新留言

  • 访客

    啊...

  • jimmy

    SEO更多跟代码有关。...

  • jianj

    node看上有点复杂...

  • 访客

    正好遇到,谢谢分享...

  • jimmy

    这个很有趣,国内SEO更多的是百度...

  • jenny

    VUE的总结的不错啊,收藏了。下次搞点React的啊...

  • jenny

    win7最经典,想当初win8出来后都没它好用,怀恋经典。。。...

  • Terry

    谢谢提醒,插件已经修复。...

首页|JavaScript|HTML|HTML4|HTML5|CSS3|开发工具|性能优化|移动开发|前端教程|性能优化|开发工具|酷站欣赏|UI设计|前端教程

Copyright © 2023 Web前端之家(www.jiangweishan.com) 版权所有 All Rights Reserved.
粤ICP备12067512号-1

Copyright Your WebSite.Some Rights Reserved.

Powered By Z-BlogPHP 1.7.2