使用canvas来完成线性渐变和径向渐变的功能的方法示例


Posted in HTML / CSS onJuly 25, 2019

fillStyle的第二种使用情况就是渐变色的填充。渐变色就分为线性渐变色和径向渐变色。

线性渐变:大致分为两步 这里又会使用到canvas的两个新的函数。

第一步 : 使用一个新的函数createLinearGradient( xstart,ystart,xend,yend );var linearGrad = context.createLinearGradient(xstart,ystart,xend,yend);

他有四个参数。分别为,xstart,ystart,xend,yend他们构成两个坐标,这两个坐标构成一个线段。这个线段实际上就是一个渐变线。渐变线用于定义渐变的方向和尺度。

第二步 : 就是在这个渐变线的基础上添加colorStop,这个方法叫addColorStop(stop,color)。他有两个参数分别为stop,color。第一个参数是一个浮点值用来决定关键色的位置。第二个参数是用来决定关键色的颜色。linearGrad.addColorStop(stop,color);

当做完这两步后这个linearGrad变量就可以作为fillStyle传入这个属性中。

看代码:

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>线性渐变</title>
</head>

<body>
    <canvas id="canvas" style="border: 1px solid #aaa;display:block;margin:0 auto"></canvas>
</body>

</html>
<script>
    window.onload = function () {
        var canvas = document.getElementById("canvas");

        canvas.width = 800;
        canvas.height = 600;

        if (canvas.getContext("2d")) {
            var context = canvas.getContext("2d");  //获取上下文绘图环境

            var linearGrad = context.createLinearGradient(0, 0, 800, 600);   //渐变线的起始坐标为(0,0)终止坐标为(800,600)

            linearGrad.addColorStop(0.0, '#000');    //第一个参数表示关键颜色的位置0表示起始位置,1表示终点位置,第二个参数表示关键颜色的颜色。
            linearGrad.addColorStop(1.0, '#fff');


            context.fillStyle = linearGrad;
            context.fillRect(0, 0, 800, 600);

        } else {
            alert('您的浏览器不支持canvas,请更换浏览器尝试~')
        }
    }
</script>

效果图:

使用canvas来完成线性渐变和径向渐变的功能的方法示例

当我们创建好linearGrad这个变量后,我们是可以addColorStop是可以添加很多个的。

举个例子:

代码:

var linearGrad = context.createLinearGradient(0, 0, 800, 600);   //渐变线的起始坐标为(0,0)终止坐标为(800,600)
 linearGrad.addColorStop(0.0, '#fff');
 linearGrad.addColorStop(0.25, '#FB3');
 linearGrad.addColorStop(0.5, '#690');
 linearGrad.addColorStop(0.75, '#09C');
 linearGrad.addColorStop(1.0, '#000');

效果图:

使用canvas来完成线性渐变和径向渐变的功能的方法示例

还有我们定义的渐变线是倾斜的,我们也可以定义成水平的或者垂直的。我们只要修改一下渐变线的终止坐标即可。看代码,做成水平的渐变色:

var linearGrad = context.createLinearGradient(0, 0, 800, 0);

效果图:

使用canvas来完成线性渐变和径向渐变的功能的方法示例

垂直的渐变色:

var linearGrad = context.createLinearGradient(0, 0, 800, 0);

效果图:

使用canvas来完成线性渐变和径向渐变的功能的方法示例

我们所做的不管倾斜的水平的还是垂直的,都是贯穿了整个画布,那如果我们的渐变线只指定到了画布的一部分会是什么效果呢?我们修改一下

var linearGrad = context.createLinearGradient(0, 0, 400, 300);

效果图:

使用canvas来完成线性渐变和径向渐变的功能的方法示例

同理我们所创建的渐变线也可以超过这个画布的最大宽高。我们修改一下

 

var linearGrad = context.createLinearGradient(-200, -100, 1000, 800);

效果图:

使用canvas来完成线性渐变和径向渐变的功能的方法示例

还有我们所绘制的填充的形状也不一定占满整个画布的。我们可以任意调整自己定义的形状。这个填充的形状会在我们定义的渐变线上找到合适的填充色进而填充出来。举个例子:

var linearGrad = context.createLinearGradient(-200, -100, 1000, 800);

效果图:

使用canvas来完成线性渐变和径向渐变的功能的方法示例

径向渐变:与线性渐变的区别是,径向渐变定义的是一个放射状的渐变。而这个放射状的渐变是定义在两个同心圆的基础上。而不像线性渐变是定义在两点之间的。

径向渐变也是需要两步来完成。

第一步 : 使用一个新的函数createRadialGradient(x0,y0,r0,x1,y1,r1); 他有6个参数。前三个参数定义第一个圆环的坐标和半径,后三个参数定义第二个圆环的坐标和半径。整个径向渐变就发生在这两个圆之间。var radialGrad = context.createRadialGradient(x0,y0,r0,x1,y1,r1);

第二步 : 和线性渐变是一样的,就不过多介绍。radialGrad.addColorStop(stop,color);

代码和线性渐变的代码十分类似。只不过这里使用的是createRadialGradient,我们给他传入参数createRadialGradient(300,300,0,300,300,500),前三个参数定义的是在画布中心,半径为0的一个点。后三个参数定义的是在画布中心半径为500的一个大圆。这样就定义了一个从一个点向外辐射的一个径向渐变。看一下代码

 

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>径向渐变</title>
</head>

<body>
    <canvas id="canvas" style="border: 1px solid #aaa;display:block;margin:0 auto"></canvas>
</body>

</html>
<script>
    window.onload = function () {
        var canvas = document.getElementById("canvas");

        canvas.width = 600;
        canvas.height = 600;

        if (canvas.getContext("2d")) {
            var context = canvas.getContext("2d");

            var radialGrad = context.createRadialGradient(300, 300, 0, 300, 300, 500);

            radialGrad.addColorStop(0.0, '#fff');
            radialGrad.addColorStop(0.25, '#FB3');
            radialGrad.addColorStop(0.5, '#690');
            radialGrad.addColorStop(0.75, '#09C');
            radialGrad.addColorStop(1.0, '#000');

            context.fillStyle = radialGrad;
            context.fillRect(0, 0, 600, 600);

        } else {
            alert('您的浏览器不支持canvas,请更换浏览器尝试~')
        }
    }

</script>

效果图:

使用canvas来完成线性渐变和径向渐变的功能的方法示例

大家可以试着改变一下参数来看看会有什么不同的效果。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

HTML / CSS 相关文章推荐
一款利用css3的鼠标经过动画显示详情特效的实例教程
Dec 29 HTML / CSS
纯CSS实现右侧底部悬浮效果(悬浮QQ、微信、微博、邮箱等联系方式)
Apr 24 HTML / CSS
animation和transition的区别
Oct 12 HTML / CSS
HTML5 Canvas标签使用收录
Jul 07 HTML / CSS
HTML5在IE10、火狐下中文乱码问题的解决方法
Nov 18 HTML / CSS
html5+css3气泡组件的实现
Nov 21 HTML / CSS
推荐10个HTML5响应式框架
Feb 25 HTML / CSS
基于html5绘制圆形多角图案
Apr 21 HTML / CSS
HTML5自定义元素播放焦点图动画的实现
Sep 25 HTML / CSS
Html5跳转到APP指定页面的实现
Jan 14 HTML / CSS
HTML5 实现图片上传预处理功能
Feb 06 HTML / CSS
CSS 鼠标选中文字后改变背景色的实现代码
May 21 HTML / CSS
浅析canvas元素的html尺寸和css尺寸对元素视觉的影响
Jul 22 #HTML / CSS
详解通过focusout事件解决IOS键盘收起时界面不归位的问题
Jul 18 #HTML / CSS
详解window.open被浏览器拦截的解决方案
Jul 18 #HTML / CSS
data:image data url 文件转为Blob上传后端的方法
Jul 16 #HTML / CSS
基于Html5 canvas实现裁剪图片和马赛克功能及又拍云上传图片 功能
Jul 09 #HTML / CSS
Html5移动端适配IphoneX等机型的方法
Jun 25 #HTML / CSS
微信小程序之html5 canvas绘图并保存到系统相册
Jun 20 #HTML / CSS
You might like
用php将任何格式视频转为flv的代码
2009/09/03 PHP
从零开始学YII2框架(二)通过 Composer 安装扩展插件
2014/08/20 PHP
浅谈使用 Yii2 AssetBundle 中 $publishOptions 的正确姿势
2017/11/08 PHP
图片完美缩放
2006/09/07 Javascript
JS弹出对话框返回值代码(asp.net后台)
2010/12/28 Javascript
IE6,IE7,IE8下使用Javascript记录光标选中范围(已补全)
2011/08/28 Javascript
JavaScript中使用Callback控制流程介绍
2015/03/16 Javascript
jQuery的position()方法详解
2015/07/19 Javascript
jQuery实现无限往下滚动效果代码
2016/04/16 Javascript
jQuery的promise与deferred对象在异步回调中的作用
2016/05/03 Javascript
浅谈js对象属性 通过点(.) 和方括号([]) 的不同之处
2016/10/29 Javascript
JavaScript中boolean类型之三种情景实例代码
2016/11/21 Javascript
javascript判断元素存在和判断元素存在于实时的dom中的方法
2017/01/17 Javascript
Vue.js在使用中的一些注意知识点
2017/04/29 Javascript
JavaScript之iterable_动力节点Java学院整理
2017/06/29 Javascript
JS选取DOM元素常见操作方法实例分析
2018/12/10 Javascript
在vue项目中使用Jquery-contextmenu插件的步骤讲解
2019/01/27 jQuery
js脚本中执行java后台代码方法解析
2019/10/11 Javascript
深入理解 ES6中的 Reflect用法
2020/07/18 Javascript
js实现双色球效果
2020/08/02 Javascript
vue3.0生命周期的示例代码
2020/09/24 Javascript
在Python中操作字符串之replace()方法的使用
2015/05/19 Python
解决Django模板无法使用perms变量问题的方法
2017/09/10 Python
Python 3.6 性能测试框架Locust安装及使用方法(详解)
2017/10/11 Python
Python探索之创建二叉树
2017/10/25 Python
Python使用Scrapy保存控制台信息到文本解析
2017/12/27 Python
Win10下python3.5和python2.7环境变量配置教程
2018/09/18 Python
将string类型的数据类型转换为spark rdd时报错的解决方法
2019/02/18 Python
python匿名函数用法实例分析
2019/08/03 Python
python for循环remove同一个list过程解析
2019/08/14 Python
python如何实现读取并显示图片(不需要图形界面)
2020/07/08 Python
技校毕业生自荐书
2014/05/23 职场文书
员工加薪申请报告
2015/05/15 职场文书
2015民办小学年度工作总结
2015/05/26 职场文书
开学季:喜迎新生,迎新标语少不了
2019/11/07 职场文书
Python中json.load()和json.loads()有哪些区别
2021/06/07 Python