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 相关文章推荐
在IE下:float属性会影响offsetTop的取值
Dec 22 Javascript
javascript数字格式化通用类 accounting.js使用
Aug 24 Javascript
客户端验证用户名和密码的方法详解
Jun 16 Javascript
关于Javascript中document.cookie的使用
Mar 08 Javascript
react native仿微信PopupWindow效果的实例代码
Aug 07 Javascript
详解React-Native全球化多语言切换工具库react-native-i18n
Nov 03 Javascript
Vue2.0+Vux搭建一个完整的移动webApp项目的示例
Mar 19 Javascript
JavaScript函数式编程(Functional Programming)组合函数(Composition)用法分析
May 22 Javascript
小程序多图列表实现性能优化的方法步骤
May 28 Javascript
VUE+node(express)实现前后端分离
Oct 13 Javascript
微信小程序实现多选框全选与反全选及购物车中删除选中的商品功能
Dec 17 Javascript
JavaScript数组类型Array相关的属性与方法详解
Sep 08 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 curl获取网页内容(IPV6下超时)的解决办法
2013/07/16 PHP
javascript编程起步(第三课)
2007/02/27 Javascript
jQuery 阴影插件代码分享
2012/01/09 Javascript
jQueryUI写一个调整分类的拖放效果实现代码
2012/05/10 Javascript
JavaScript实现的图像模糊算法代码分享
2014/04/22 Javascript
js+csss实现的一个带复选框的下拉框
2014/09/29 Javascript
javascript使用smipleChart实现简单图表
2015/01/02 Javascript
JS中常用的正则表达式
2016/09/29 Javascript
JavaScript字符串_动力节点Java学院整理
2017/06/27 Javascript
使用vue根据状态添加列表数据和删除列表数据的实例
2018/09/29 Javascript
发布订阅模式在vue中的实际运用实例详解
2019/06/09 Javascript
js实现点击烟花特效
2020/10/14 Javascript
[01:32:50]DOTA2-DPC中国联赛 正赛 DLG vs XG BO3 第一场 1月25日
2021/03/11 DOTA
python在linux系统下获取系统内存使用情况的方法
2015/05/11 Python
浅谈python中的占位符
2017/11/09 Python
推荐10款最受Python开发者欢迎的Python IDE
2018/09/16 Python
python 不同方式读取文件速度不同的实例
2018/11/09 Python
Python3 Post登录并且保存cookie登录其他页面的方法
2018/12/28 Python
使用Filter过滤python中的日志输出的实现方法
2019/07/17 Python
python+selenium 鼠标事件操作方法
2019/08/24 Python
python hashlib加密实现代码
2019/10/17 Python
使用Python三角函数公式计算三角形的夹角案例
2020/04/15 Python
CSS3毛玻璃效果(blur)有白边问题的解决方法
2016/11/15 HTML / CSS
深入了解canvas在移动端绘制模糊的问题解决
2019/04/30 HTML / CSS
canvas实现图片镜像翻转的2种方式
2020/07/22 HTML / CSS
戴森台湾线上商城:Dyson Taiwan
2018/05/21 全球购物
捷克购买家具网站:JENA nábytek
2020/03/19 全球购物
行政人员岗位职责
2013/12/08 职场文书
《姥姥的剪纸》教学反思
2014/02/25 职场文书
校园学雷锋活动月总结
2014/03/09 职场文书
初中生期末评语大全
2014/04/24 职场文书
导师评语大全
2014/04/26 职场文书
工作骂脏话检讨书
2014/10/05 职场文书
升职自荐信怎么写
2015/03/05 职场文书
大一新生军训新闻稿
2015/07/17 职场文书
将Python代码打包成.exe可执行文件的完整步骤
2021/05/12 Python