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 相关文章推荐
Javascript中的数学函数
Apr 04 Javascript
写了一个layout,拖动条连贯,内容区可为iframe
Aug 19 Javascript
JavaScript中诡异的delete操作符
Mar 12 Javascript
浅谈Node.js中的定时器
Jun 18 Javascript
jquery判断复选框是否选中进行答题提示特效
Dec 10 Javascript
Node.js实用代码段之获取Buffer对象字节长度
Mar 17 Javascript
解决jQuery ajax请求在IE6中莫名中断的问题
Jun 20 Javascript
Jqprint实现页面打印
Jan 06 Javascript
JS打开摄像头并截图上传示例
Feb 18 Javascript
JavaScript防止全局变量污染的方法总结
Aug 02 Javascript
vue中各种通信传值方式总结
Feb 14 Javascript
vue项目实现设置根据路由高亮对应的菜单项操作
Aug 06 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
回首过去10年中最搞笑的10部动漫,哪一部让你节操尽碎?
2020/03/03 日漫
php GeoIP的使用教程
2011/03/09 PHP
ThinkPHP中自定义目录结构的设置方法
2014/08/15 PHP
PHP中的静态变量及static静态变量使用详解
2015/11/05 PHP
javascript生成/解析dom的CDATA类型的字段的代码
2007/04/22 Javascript
ExtJs Excel导出并下载IIS服务器端遇到的问题
2011/09/16 Javascript
mailto的使用技巧分享
2012/12/21 Javascript
JQuery对表单元素的基本操作使用总结
2014/07/18 Javascript
简述JavaScript对传统文档对象模型的支持
2015/06/16 Javascript
javascript创建对象、对象继承的实用方式详解
2016/03/08 Javascript
如何使用AngularJs打造权限管理系统【简易型】
2016/05/09 Javascript
Bootstrap编写一个兼容主流浏览器的受众巨幕式风格页面
2016/07/01 Javascript
jQuery实现一个简单的验证码功能
2017/06/26 jQuery
Layui实现主窗口和Iframe层参数传递
2019/11/14 Javascript
vue3自定义dialog、modal组件的方法
2021/01/04 Vue.js
[01:37]DOTA2超级联赛专访ChuaN 传奇般的电竞之路
2013/06/19 DOTA
python的三目运算符和not in运算符使用示例
2014/03/03 Python
python3.0 模拟用户登录,三次错误锁定的实例
2017/11/02 Python
python用opencv批量截取图像指定区域的方法
2019/01/24 Python
Python3读取和写入excel表格数据的示例代码
2020/06/09 Python
2020版Python学习路线图(附学习资料)
2020/09/15 Python
css3截图_动力节点Java学院整理
2017/07/11 HTML / CSS
逼真的HTML5树叶飘落动画
2016/03/01 HTML / CSS
跑步爱好者一站式服务网站:Jack Rabbit
2016/09/01 全球购物
美国网上鞋城:Shoeline.com
2016/11/17 全球购物
英国网上购买门:Direct Doors
2018/06/07 全球购物
JACK & JONES荷兰官网:男士服装和鞋子
2021/03/07 全球购物
PHP如何调用MYSQL存储过程
2014/05/30 面试题
生产内勤岗位职责
2013/12/07 职场文书
岗位职责风险防控
2014/02/18 职场文书
《钱学森》听课反思
2014/03/01 职场文书
爱国演讲稿500字
2014/05/04 职场文书
事业单位个人总结
2015/02/12 职场文书
电影开国大典观后感
2015/06/04 职场文书
人为什么会“幸灾乐祸”?
2019/08/06 职场文书
python如何利用cv2.rectangle()绘制矩形框
2022/12/24 Python