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 相关文章推荐
JS模拟面向对象全解(一、类型及传递)
Jul 13 Javascript
jQuery验证Checkbox是否选中的代码 推荐
Sep 04 Javascript
基于jQuery实现模拟页面加载进度条
Apr 01 Javascript
Javascript中的方法链(Method Chaining)介绍
Mar 15 Javascript
jQuery实现的经典竖向伸缩菜单效果代码
Sep 24 Javascript
Javascript 事件冒泡机制详细介绍
Oct 10 Javascript
走进AngularJs之过滤器(filter)详解
Feb 17 Javascript
在Vue中使用Compass的方法
Mar 02 Javascript
vue实现底部菜单功能
Jul 24 Javascript
JavaScript设计模式之工厂模式和抽象工厂模式定义与用法分析
Jul 26 Javascript
vue 实现根据data中的属性值来设置不同的样式
Aug 04 Javascript
OpenLayers3实现测量功能
Sep 25 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学习 变量使用总结
2011/03/24 PHP
php中关于codeigniter的xmlrpc的类在进行数据交换时的类型问题
2011/07/03 PHP
PHP把空格、换行符、中文逗号等替换成英文逗号的正则表达式
2014/05/04 PHP
JavaScript的单例模式 (singleton in Javascript)
2010/06/11 Javascript
基于jquery的设置页面文本框 只能输入数字的实现代码
2011/04/19 Javascript
IFrame跨域高度自适应实现代码
2012/08/16 Javascript
jQuery CSS3相结合实现时钟插件
2016/01/08 Javascript
js将滚动条滚动到指定位置的简单实现方法
2016/06/25 Javascript
node.js中的事件处理机制详解
2016/11/26 Javascript
js实现随机抽选效果、随机抽选红色球效果
2017/01/13 Javascript
jquery实现拖动效果(代码分享)
2017/01/25 Javascript
JS动态插入脚本和插入引用外部链接脚本的方法
2018/05/21 Javascript
vuejs2.0运用原生js实现简单拖拽元素功能
2020/08/21 Javascript
vue中过滤器filter的讲解
2019/01/21 Javascript
javascript实现前端成语点击验证
2020/06/24 Javascript
Python WXPY实现微信监控报警功能的代码
2017/10/20 Python
python看某个模块的版本方法
2018/10/16 Python
详解Django+Uwsgi+Nginx 实现生产环境部署
2018/11/06 Python
树莓派使用python-librtmp实现rtmp推流h264的方法
2019/07/22 Python
python经典趣味24点游戏程序设计
2019/07/26 Python
Python Tornado之跨域请求与Options请求方式
2020/03/28 Python
Python实现文件压缩和解压的示例代码
2020/08/12 Python
欧舒丹澳洲版:L’OCCITANE
2017/07/17 全球购物
丹尼尔惠灵顿手表天猫官方旗舰店:Daniel Wellington
2017/08/25 全球购物
英国受欢迎的运动鞋和街头服装商店:Footasylum
2018/06/12 全球购物
司机的工作范围及职责
2013/11/13 职场文书
中文专业求职信
2014/06/20 职场文书
国际商务英语专业求职信
2014/07/08 职场文书
装修活动策划方案
2014/08/27 职场文书
2014年流动人口工作总结
2014/11/26 职场文书
劳动保障事务所个人工作总结
2015/08/12 职场文书
Python中rapidjson参数校验实现
2021/07/25 Python
实现一个简单得数据响应系统
2021/11/11 Javascript
python脚本框架webpy模板控制结构
2021/11/20 Python
Win10 heic文件怎么打开 ? Win10 heic文件打开教程
2022/04/06 数码科技
Win10此设备不支持接收Miracast无法投影的解决方法
2022/07/07 数码科技