html5 中canvas提供了强大的渲染样式,可以实现一些比较复杂的样式设置,今天学习了CanvasGradient对象可以实现一个颜色的渐变

CanvasGradient对象可以实现两种不同形式的颜色渐变,

  1. 线性颜色渐变(从一端到一端的颜色渐变)
  2. 放射性颜色渐变(从一个点或一个圆向外进行辐射性的颜色渐变)

一.首先要创建一个CanvasGradient对象(两种)

1.创建一个作用于canvas指定区域的线性颜色渐变CanvasGradient对像:

createLinearGradient(xStart, yStart, xEnd, yEnd)

参数说明:startX,startY左上角坐标,endX,endY右下角坐标-à形成一个矩形区域

2.创建一个作用于canvas指定区域的线性颜色渐变CanvasGradient对像:

createLinearGradient(xStart, yStart, radiusStart, xEnd, yEnd, radiusEnd)

参数说明: (xStart, yStart)第一个圆的圆心, radiusStart第一个圆半径,( xEnd, yEnd)第二个圆的圆心坐标, radiusEnd第二个圆的半径,

其作用区域就是第一个圆到第二个圆之间的环状区域

二.实现颜色渐变效果

通过以上的方法创建会返回了一个新的 CanvasGradient 对象,此新对象具备属性或方法是addColorStop(offset, color),

参数: 是一个范围在0.0到1.0之间的浮点值。对于CanvasGradient对象而言,它将整个作用区域看成是一个从0到1的过度,0表示起始点,1表示结束点.

color表示要填充的颜色.

ps:可以一次或者多次调用addColorStop()方法向作用区域中添加指定颜色的渐变点。在绘制成图像时,它就会实现从上一个渐变点的颜色到下一个渐变点的颜色进行过渡的渐变效果。

1.实现线性颜色渐变

 //前面已创建一个矩形fillRect(50,50,250,50)
//创建一个表示线性颜色渐变的CanvasGradient对象,并设置该对象的作用区域就是线段所在的区域 var canvasGradient = ctx.createLinearGradient(50, 50, 250, 50); //在offset为0的位置(即起点位置)添加一个蓝色的渐变 canvasGradient.addColorStop(0, "blue"); //在offset为0.2的位置(线段左起20%的位置)添加一个绿色的渐变 canvasGradient.addColorStop(0.2, "green"); //在offset为0的位置(即终点位置)添加一个红色的渐变 canvasGradient.addColorStop(1, "red"); //将strokeStyle的属性值设为该CanvasGradient对象 ctx.strokeStyle = canvasGradient; //最后,绘制出当前绘制路径的图形效果 ctx.stroke();

2.实现放射性颜色渐变

 //绘制一个以坐标点(100,100)为圆心、半径为50px的圆形

     ctx.arc(100, 100, 50, 0, Math.PI * 2, false);

     //创建一个表示放射性颜色渐变的CanvasGradient对象
//该对象的作用域是以(100,100)为圆心、半径为10px的内圆和以(100,100)为圆心、半径为50px的外圆之间的环状区域 var canvasGradient = ctx.createRadialGradient(100, 100, 10, 100, 100, 50); //在offset为0的位置(即内圆的圆圈处)添加一个蓝色的渐变 canvasGradient.addColorStop(0, "blue"); //在offset为0.5的位置(环状区域从内到外放射50%的中间位置)添加一个绿色的渐变 canvasGradient.addColorStop(0.5, "green"); //在offset为0的位置(即外圆的圆圈处)添加一个红色的渐变 canvasGradient.addColorStop(1, "red"); //将fillStyle的属性值设为该CanvasGradient对象 ctx.fillStyle = canvasGradient; ctx.fill();

PS:放射性颜色渐变效果一般用于圆形、扇形等从某处开始向周围发散的图形,不过,放射性颜色渐变效果同样可以用于其他图形。它并不依赖于图形,而是依赖于创建CanvasGradient对象时所指定的作用区域。不管是何种图形,它都会在指定的作用区域内实现对应的颜色渐变效果。

html5 canvas中CanvasGradient对象用法的更多相关文章

  1. HTML5 Canvas中实现绘制一个像素宽的细线

    正统的HTML5 Canvas中如下代码 ctx.lineWidth = 1; ctx.beginPath(); ctx.moveTo(10, 100); ctx.lineTo(300,100); c ...

  2. HTML5 Canvas 中的颜色、样式和阴影的属性和方法

    颜色.样式和阴影的属性与方法 fillStyle                设置或返回用于填充绘画的颜色.渐变或模式 strokeStyle         设置或返回用于笔触的颜色.渐变或模式 ...

  3. HTML5 canvas中的路径方法

    路径方法 fill()                                填充当前绘图(路径) stroke()                        绘制已定义的路径 begin ...

  4. HTML5 canvas 中的线条样式

    线条样式属性 lineCap        设置或返回线条的结束端点样式 butt         默认.向线条的每个末端添加平直的边缘. round         向线条的每个末端添加圆形线帽. ...

  5. HTML5 Canvas中9宫格的坑

    近期小鸟情人游戏上了手机qq空间,一个3岁的游戏来了她的第二春.为了能有更好的表现,我们对其进行了一次改版. 改版当中一项就是对原来的弹出框样式进行改进.将大块木板材质改成纯色(边框为圆角金属材质)样 ...

  6. HTML5 Canvas ( 创建图形对象 ) createImageData

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  7. HTML5 Canvas中绘制椭圆的几种方法

    1.canvas自带的绘制椭圆的方法 ellipse(x, y, radiusX, radiusY, rotation, startAngle, endAngle, anticlockwise)是后来 ...

  8. HTML5 canvas中的转换方法

    转换方法 scale(scalewidth,scaleheight)                缩放当前绘图至更大或更小 scalewidth         缩放当前绘图的宽度 (1=100%, ...

  9. vue中Promise对象用法

    Promise.all([ 需要异步一起执行的方法---------先做的事 ]).then(res=>{ 后做的事(先做的事已经做好了) }) 举栗子: Promise.all([ this. ...

随机推荐

  1. [转]jQuery Mobile: Get data passed to page via changePage mobile.changePage

    本文转自:http://stackoverflow.com/questions/15840611/jquery-mobile-get-data-passed-to-page-via-changepag ...

  2. idea编译golang插件总结

    由于使用习惯了Idea 和vim插件.于是下载了idea的go插件并安装,可惜不支持go1.4 ,官方的go插件版本太低 133.326 — 133.9999 .只能手动编译 按照这个教程就可以 ht ...

  3. ZK使用

    1. 关注问题 1. zookeeper集群如何保证请求的均匀分布? 由client建立连接时会随机取server保证均匀分布, 2.已布置完成的ZK集群如何扩容? 修改配置后逐台重启即可 2. ZK ...

  4. telnet不能用,提示:-bash: telnet: command not found

    1.[root@localhost ~]# telnet  bash: telnet: command not found 2. 查询了是否安装Telnet包,结果如下: [root@localhos ...

  5. Lua 遍历Linux目录下的文件夹

    代码如下,里面有注释,应该能看懂. function getFile(file_name) local f = assert(io.open(file_name, 'r')) local string ...

  6. 【防火墙】DMZ

    DMZ是英文“demilitarized zone”的缩写,中文名称为“隔离区”,也称“非军事化区”.它是为了解决安装防火墙后外部网络的访问用户不能访问内部网络服务器的问题,而设立的一个非安全系统与安 ...

  7. Swift UI开发初探 (转)

    原文地址:http://www.tairan.com/archives/6600 关于Swift语法,可以参考<Apple Swift编程语言入门教程> 效果如下: 开发环境 Xcode6 ...

  8. svg保存为图片下载到本地

    今天给大家说一个将svg下载到本地图片的方法,这里我不得不吐槽一下,为啥博客园不可以直接上传本地文件给大家用来直接下载分享呢,好,吐槽到此为止! 这里需要用到一个js文件,名字自己起,内容如下: (f ...

  9. 好用的切换滑动焦点图框架jquery.superslide

    拿到学习网站:http://www.superslide2.com/

  10. 添加并发请求PDF到工作流附件

    本节实现将并发请求输出PDF文件添加到工作流附件 省去了工作流中其他部分,只对附件部分介绍 1.       建立一个类型为Document的Attribute