canvas多重阴影发光效果实现


Posted in Javascript onApril 20, 2021

前言

在一个项目中,客户提了一个发光的效果,效果图如下:
 

canvas多重阴影发光效果实现

阴影

有的人可能会说,这个用阴影其实就可以实现。但是从图中可以看出,是一个比较强烈的发光效果。实际的应用过程中我们会发现用简单阴影参数实现的效果很难达到这样强烈的发光效果。
比如

ctx.shadowColor = 'rgba(255,0,0,1)';
  ctx.shadowBlur =10;
  ctx.shadowOffsetX = 10;
  ctx.shadowOffsetY = 10;

  ctx.fillStyle = 'rgba(0,0,255,1.0)';
  ctx.fillRect(100,100,200,100);

canvas多重阴影发光效果实现

简单的阴影效果下,shadowBlur 表示阴影半径。当阴影半径比较大的时候,阴影的扩散程度会比较大,但阴影的强烈度不够。在阴影的半径比较小的时候,阴影的强烈度是够的,但阴影的扩散程度会比较小。

多重阴影

如何达到具有较强的阴影强度,又有较好的阴影扩散度呢?也就是实现这种比较强烈的发光效果。嗯,答案就是使用多重阴影效果。

所谓多重阴影效果,使用阴影效果对图形进行多次绘制,多次绘制的过程中,shadowBlur的值会不一样,这样可以形成多个阴影叠加的效果。

下面是一个简单的示例,代码如下。

ctx.shadowColor = 'rgba(255,255,0,1)';
  ctx.shadowBlur = 20;
  ctx.shadowOffsetX = 10100;
  ctx.shadowOffsetY = 10100;

  ctx.beginPath();
  ctx.fillStyle = 'rgba(0,0,255,1.0)';
  ctx.arc(-10000, -10000, 50, 0, Math.PI * 2);
  ctx.fill();

  ctx.shadowColor = 'rgba(255,0,0,1)';
  ctx.shadowBlur = 20;
  ctx.shadowOffsetX = 10100;
  ctx.shadowOffsetY = 10100;

  ctx.beginPath();
  ctx.fillStyle = 'rgba(0,0,255,1.0)';
  ctx.arc(-10000, -10000, 30, 0, Math.PI * 2);
  ctx.fill();

从代码中我们可以看出我们多次使用了阴影的绘制啊,最终的绘制效果如下图所示。

canvas多重阴影发光效果实现

从图中可以看出, 阴影有较好的扩散程度,也有较好的强烈度。

下面是用多重阴影实现的文字霓虹灯效果,同样可以看出有较好的发光效果。

canvas多重阴影发光效果实现

总结

可以看出要达到强烈的发光效果, 需要使用多重阴影功能。当然使用多种阴影也不是没有限制的, 因为阴影本身有很大的性能损耗。通过尝试我们发现一般3~5次之间就能够达到较好的效果吧。

到此这篇关于canvas多重阴影发光效果实现的文章就介绍到这了,更多相关canvas多重阴影发光内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章,希望大家以后多多支持三水点靠木!

 
Javascript 相关文章推荐
Convert Seconds To Hours
Jun 16 Javascript
JSDoc 介绍使用规范JsDoc的使用介绍
Feb 12 Javascript
c#和Javascript操作同一json对象的实现代码
Jan 17 Javascript
javascript判断非数字的简单例子
Jul 18 Javascript
jquery validate在ie8下的bug解决方法
Nov 13 Javascript
JavaScript设计模式之策略模式实例
Oct 10 Javascript
node.js中的http.response.getHeader方法使用说明
Dec 14 Javascript
浅析js的模块化编写 require.js
Dec 07 Javascript
Vue数据驱动模拟实现2
Jan 11 Javascript
validationEngine 表单验证插件使用实例代码
Jun 15 Javascript
原生js获取left值和top值的三种方法
Aug 02 Javascript
解决vue项目input输入框双向绑定数据不实时生效问题
Aug 05 Javascript
JavaScript+HTML实现学生信息管理系统
浅谈vue2的$refs在vue3组合式API中的替代方法
JS实现简单控制视频播放倍速的实例代码
Vue.js 带下拉选项的输入框(Textbox with Dropdown)组件
使用PDF.js渲染canvas实现预览pdf的效果示例
Apr 17 #Javascript
详解如何在Canvas中添加事件的方法
Apr 17 #Javascript
Canvas三种动态画圆实现方法说明(小结)
You might like
PHP获取数组最后一个值的2种方法
2015/01/21 PHP
PHP连接MySQL数据库的三种方式实例分析【mysql、mysqli、pdo】
2019/11/04 PHP
jquery的颜色选择插件实例代码
2008/10/02 Javascript
10个基于jQuery或JavaScript的WYSIWYG 编辑器整理
2010/05/06 Javascript
JavaScript arguments 多参传值函数
2010/10/24 Javascript
jquery js 获取时间差、时间格式具体代码
2013/06/05 Javascript
JSP跨iframe如何传递参数实现代码
2013/09/21 Javascript
javascript中数组中求最大值示例代码
2013/12/18 Javascript
javascript实现复制与粘贴操作实例
2014/10/16 Javascript
Angularjs实现多个页面共享数据的方式
2016/03/29 Javascript
jquery简单插件制作(fn.extend)完整实例
2016/05/24 Javascript
动态设置form表单的action属性的值的简单方法
2016/05/25 Javascript
Javascript字符串常用方法详解
2016/07/21 Javascript
动态Axios的配置步骤详解
2018/01/12 Javascript
使用vue制作探探滑动堆叠组件的实例代码
2018/03/07 Javascript
重新认识vue之事件阻止冒泡的实现
2018/08/02 Javascript
Angular刷新当前页面的实现方法
2018/11/21 Javascript
详解Angular中实现自定义组件的双向绑定的两种方法
2018/11/23 Javascript
js中数组对象去重的两种方法
2019/01/18 Javascript
JavaScript中变量提升机制示例详解
2019/12/27 Javascript
Vue v-for中的 input 或 select的值发生改变时触发事件操作
2020/08/31 Javascript
[03:58]兄弟们,回来开黑了!DOTA2昔日战友招募宣传视频
2016/07/17 DOTA
Python中使用glob和rmtree删除目录子目录及所有文件的例子
2014/11/21 Python
Python生成随机密码
2015/03/10 Python
Python数据库的连接实现方法与注意事项
2016/02/27 Python
java中两个byte数组实现合并的示例
2018/05/09 Python
Linux安装Python3如何和系统自带的Python2并存
2020/07/23 Python
微软开源最强Python自动化神器Playwright(不用写一行代码)
2021/01/05 Python
Python爬虫后获取重定向url的两种方法
2021/01/19 Python
Finishline官网:美国一家领先的运动品牌鞋类、服装零售商
2016/07/20 全球购物
附答案的Java面试题
2012/11/19 面试题
店长岗位的工作内容
2013/11/12 职场文书
外贸英语毕业生自荐信
2013/11/14 职场文书
工程部主管岗位职责
2013/11/17 职场文书
国庆节标语大全
2014/10/08 职场文书
使用springboot暴露oracle数据接口的问题
2021/05/07 Oracle