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延迟加载
Mar 09 Javascript
Jquery 的扩展方法总结
Oct 01 Javascript
jQuery图片切换插件jquery.cycle.js使用示例
Jun 16 Javascript
javascript中setInterval的用法
Jul 19 Javascript
jQuery插件实现多级联动菜单效果
Dec 01 Javascript
全面解析JavaScript的Backbone.js框架中的Router路由
May 05 Javascript
Bootstrap3.0建站教程(一)之bootstrap表单元素排版
Jun 01 Javascript
jQuery实现简单的下拉菜单导航功能示例
Dec 07 jQuery
深入浅出了解Node.js Streams
May 27 Javascript
node.js使用http模块创建服务器和客户端完整示例
Feb 10 Javascript
ES5 模拟 ES6 的 Symbol 实现私有成员功能示例
May 06 Javascript
antd Select下拉菜单动态添加option里的内容操作
Nov 02 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 chmod 函数与批量修改文件目录权限
2010/05/10 PHP
php将时间差转换为字符串提示
2011/09/07 PHP
PHP中浮点数计算比较及取整不准确的解决方法
2015/01/09 PHP
使用ThinkPHP生成缩略图及显示
2017/04/27 PHP
Yii框架实现记录日志到自定义文件的方法
2017/05/23 PHP
yii插入数据库防并发的简单代码
2017/05/27 PHP
JQuery 插件制作实践 xMarquee插件V1.0
2010/04/02 Javascript
Jquery Ajax请求代码(2)
2011/01/07 Javascript
分享10篇优秀的jQuery幻灯片制作教程及应用案例
2011/04/16 Javascript
JS实现侧悬浮浮动实例代码
2013/11/29 Javascript
js生成随机数之random函数随机示例
2013/12/20 Javascript
基于jquery的手风琴图片展示效果实现方法
2014/12/16 Javascript
浅谈 javascript 事件处理
2015/01/04 Javascript
jQuery使用before()和after()在元素前后添加内容的方法
2015/03/26 Javascript
jquery实现超简洁的TAB选项卡效果代码
2015/08/28 Javascript
JS输出空格的简单实现方法
2016/09/08 Javascript
JS中定位 position 的使用实例代码
2017/08/06 Javascript
jquery使用iscorll实现上拉、下拉加载刷新
2017/10/26 jQuery
webpack 打包压缩js和css的方法示例
2018/03/20 Javascript
webpack里使用jquery.mCustomScrollbar插件的方法
2018/05/30 jQuery
在vue中使用echarts图表实例代码详解
2018/10/22 Javascript
对layui初始化列表的CheckBox属性详解
2019/09/13 Javascript
在vue中配置不同的代理同时访问不同的后台操作
2020/09/11 Javascript
实例讲解Python爬取网页数据
2018/07/08 Python
Python数据集切分实例
2018/12/08 Python
Python匿名函数及应用示例
2019/04/09 Python
基于打开pycharm有带图片md文件卡死问题的解决
2020/04/24 Python
浅谈numpy中函数resize与reshape,ravel与flatten的区别
2020/06/18 Python
Django contrib auth authenticate函数源码解析
2020/11/12 Python
Python爬虫简单运用爬取代理IP的实现
2020/12/01 Python
美国最大的珠宝首饰网上商城:Jewelry.com
2016/07/22 全球购物
营销主管自我评价怎么写
2013/09/19 职场文书
外贸专业求职信
2014/03/09 职场文书
教师节大会主持词
2015/07/06 职场文书
PHP实现两种排课方式
2021/06/26 PHP
2021好看的国漫排行榜前十名 《完美世界》上榜,《元龙》排名第一
2022/03/18 国漫