在canvas里面,除了使用纯色,我们还能把填充和笔触样式设置为渐变色:线性渐变和径向渐变。

线性渐变 createLinearGradient(x0,y0,x1,y1)  返回 CanvasGradient

四个参数分别是渐变色起始坐标x,起始坐标y,结束坐标x,结束坐标y。

渐变色沿着两点之间的一条线来进行渐变。

径向渐变 createRadialGradient(x0,y0,r0,x1,y1,r1) 返回CanvasGradient

六个参数分别是

起点圆心坐标(x0,y0)

起点圆心半径(r0)

终点圆心坐标(x1,y1)

终点圆心​半径(r1)

这两种渐变方法都会返回一个 CanvasGradient对象,这个对象定义了addColorStop(position,color)的方法。

addColorStop() 给渐变的梯度线添加一种纯色,  返回​void。

举例

 var ctx = document.querySelector('canvas').getContext('2d');

 var grad = ctx.​​createLinearGradient(0,0,500,500);

 grad.addColorStop(0,'green');

 grad.addColorStop(0.5,'yellow');

 grad.addColorStop(1,'blue');

注意,此时在画布上已经创建了一个矩形渐变范围,坐标是 0,0,500,500;

但并没有显示出来,此时需要我们再绘出一个别的形状--以​矩形为例。

来选择我们要显示的渐变范围,这个重新绘出的矩形需要取grad的样式。

 ctx.fillStyle = grad;
ctx.fillRect(x,y,w,h);

此时,也就是说我们接下来要画的矩形,使用了我们刚才创建的渐变色。

不难想象,我们预先配置好的渐变范围其实就是一个长宽各500的矩形,渐变方向

是从左上角到右下角。

但是,我们要把这个新绘制矩形的放在哪呢?

我们可以把我们配置好的500*500的渐变范围当一块地,上面被土掩盖了,下面​是各种果实。你想看哪块的果实,你就把这个新矩形画在哪里。

你可以也画一个0,0,500,500的矩形,直接把整块地翻起来。​

你也可以画一个0,0,50,50的​矩形,只能看到左上角的绿色green,因为他渐变到yellow,或许是从50之后才开始的。

你也可以画一个450,450,50,50的矩形,那么你看到的将是右下角的blue。​

Canvas使用渐变之-线性渐变详解的更多相关文章

  1. 如何把canvas元素作为网站背景总结详解

    如何把canvas元素作为网站背景总结详解 一.总结 一句话总结:最简单的做法是绝对定位并且z-index属性设置为负数. 1.如何把canvas元素作为网站背景的两种方法? a.设置层级(本例代码就 ...

  2. CSS3渐变(Gradients)-线性渐变

    CSS3渐变(Gradients)可以让你在两个或多个指定颜色之间显示平稳的过度,包括透明度. 以前,你必须使用图像来实现这些效果.但是,通过Css3渐变(Gradients),你可以减少下载的事件和 ...

  3. CSS3 02. 边框、边框圆角、边框阴影、边框图片、渐变、线性渐变、径向渐变、背景、过渡transition、2D转换

    边框圆角 border-radius 每个角可以设置两个值,x值.y值 border-top-left-radius:水平半径 垂直半径 border-radius:水平半径/垂直半径 border- ...

  4. css3渐变之线性渐变

    css3定义了两种类型的渐变,即线性渐变和径向渐变.这里我要说的是线性渐变. 为了创建一个线性渐变,你必须至少定义两种颜色结点.颜色结点即你想要呈现平稳过渡的颜色.同时,你也可以设置一个起点和一个方向 ...

  5. IT兄弟连 HTML5教程 CSS3属性特效 渐变2 线性渐变实例

    3 线性渐变实例 一.颜色从顶部向底部渐变 制作从顶部到底部直线渐变有三种方法,第一种是起点参数不设置,因为起点参数的默认值为“top”:第二种方法起点参数设置为“top”:第三种起点参数使用“-90 ...

  6. Android开发之线性布局详解(布局权重)

    布局权重 线性布局支持给个别的子视图设定权重,通过android:layout_weight属性.就一个视图在屏幕上占多大的空间而言,这个属性给其设 定了一个重要的值.一个大的权重值,允许它扩大到填充 ...

  7. 线性DP详解

    顾名思义,线性DP就是在一条线上进行DP,这里举一些典型的例子. LIS问题(最长上升子序列问题) 题目 给定一个长度为N的序列A,求最长的数值单调递增的子序列的长度. 上升子序列B可表示为B={Ak ...

  8. 数据结构 1 线性表详解 链表、 栈 、 队列 结合JAVA 详解

    前言 其实在学习数据结构之前,我也是从来都没了解过这门课,但是随着工作的慢慢深入,之前学习的东西实在是不够用,并且太皮毛了.太浅,只是懂得一些浅层的,我知道这个东西怎么用,但是要优化.或者是解析,就不 ...

  9. Android LinearLayout线性布局详解

    为了更好地管理Android应用的用户界面里的各组件,Android提供了布局管理器.通过使用布局管理器,Android应用图形用户界面具有良好的平台无关性.推荐使用布局管理器来管理组件的分布.大小, ...

随机推荐

  1. java 键盘输入多种方法 .(转载)

    一.java不像C中拥有scanf这样功能强大的函数,大多是通过定义输入输出流对象.常用的类有BufferedReader,Scanner. 实例程序: 1.利用 Scanner 实现从键盘读入int ...

  2. .net mvc笔记2_Essential C# Features

    Essential C# Features 1.Using Automatically Implemented Properties public class Product { private st ...

  3. :last-child的诡异的问题!!

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  4. Android 优化性能之 如何避免--过度绘制

    可能有些人不明白什么是过度绘制,简单言,我们app一个页面所显示的效果是由像素一帧一帧绘制而成.过度绘制就是意味着这一帧被绘制多次.如果是静态的布局,可能影响不是很大,如果是动态的,比如ListVie ...

  5. flume-ng+Kafka+Storm+HDFS 实时系统组合

    http://www.aboutyun.com/thread-6855-1-1.html

  6. 在美国,一名 Uber 司机能赚多少?

    在美国,Uber 司机是最热门的职业.有了 uberX,任何有车一族都能成为司机.Uber 让我们很容易成为司机. 虽然 Uber 做不到赚得盆满钵满,但对于水深火热的司机这一行来说,多了许多盈利机会 ...

  7. 动态调用python类和函数

    类 class test1(object): def __init__(self): print "i am test1" class test2(object): def __i ...

  8. c#打印记忆功能

    下面这些实例都可以拷下直接用 总体思路:保存打印设置信息到本地文件,下次打印的时候直接读取文件信息,通过序列化与反序列化来获取值.本例只是针对打印的横纵向进行设置,读者也可以增加其他设置信息进行保存读 ...

  9. CVT电子集团--笔试部分试题

    之前有在网上答了下CVT的网上笔试题,特别把它们都弄下来,答案参考,不一定是对的,有错希望大家能提出来. 1.有关系R和S,R∩S等价于(B) A.S-(R-S)    B.R-(R-S)   C.( ...

  10. C#中数组、ArrayList和List三者的区别(转)

    好东西,总结的很到位,收藏了! 源地址:http://blog.csdn.net/zhang_xinxiu/article/details/8657431