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点击事件链接的问题解决
Apr 25 Javascript
Ajax局部更新导致JS事件重复触发问题的解决方法
Oct 14 Javascript
深入理解JavaScript系列(35):设计模式之迭代器模式详解
Mar 03 Javascript
js实现固定显示区域内自动缩放图片的方法
Jul 18 Javascript
简单谈谈javascript中this的隐式绑定
Feb 22 Javascript
Javascript 事件冒泡机制详细介绍
Oct 10 Javascript
详解Vue 普通对象数据更新与 file 对象数据更新
Apr 26 Javascript
vue2.0中vue-cli实现全选、单选计算总价格的实例代码
Jul 18 Javascript
electron demo项目npm install安装失败的解决方法
Feb 06 Javascript
Vue实现双向绑定的原理以及响应式数据的方法
Jul 02 Javascript
在微信小程序中渲染HTML内容的方法示例
Sep 28 Javascript
在Angular项目使用socket.io实现通信的方法
Jan 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
THINKPHP截取中文字符串函数实例代码
2017/03/20 PHP
PHP+jQuery实现滚屏无刷新动态加载数据功能详解
2017/05/04 PHP
PHP面向对象之事务脚本模式(详解)
2017/06/07 PHP
PHP使用两个栈实现队列功能的方法
2018/01/15 PHP
php格式文件打开的四种方法
2018/02/24 PHP
PHP实现 APP端微信支付功能
2018/06/22 PHP
Highslide.js是一款基于js实现的网页中图片展示插件
2020/03/30 Javascript
asp(javascript)全角半角转换代码 dbc2sbc
2009/08/06 Javascript
让iframe子窗体取父窗体地址栏参数(querystring)
2009/10/13 Javascript
自己整理的一个javascript日期处理函数
2010/10/16 Javascript
JavaScript学习笔记(二) js对象
2011/10/25 Javascript
jquery实现漂浮在网页右侧的qq在线客服插件示例
2013/05/13 Javascript
动态获取复选框checkbox选中个数的jquery代码
2013/06/25 Javascript
解决Jquery鼠标经过不停滑动的问题
2014/03/03 Javascript
JavaScript中的eval()函数使用介绍
2014/12/31 Javascript
JavaScript实现节点的删除与序号重建实例
2015/08/05 Javascript
JavaScript 定时器 SetTimeout之定时刷新窗口和关闭窗口(代码超简单)
2016/02/26 Javascript
轻松实现js弹框显示选项
2016/09/13 Javascript
JS实现移动端按首字母检索城市列表附源码下载
2017/07/05 Javascript
vue中使用props传值的方法
2019/05/08 Javascript
Vue CLI3移动端适配(px2rem或postcss-plugin-px2rem)
2020/04/27 Javascript
Vue仿Bibibili首页的问题
2021/01/21 Vue.js
Python 深入理解yield
2008/09/06 Python
Python实现爬取逐浪小说的方法
2015/07/07 Python
Python写一个基于MD5的文件监听程序
2019/03/11 Python
python3常用的数据清洗方法(小结)
2019/10/31 Python
使用Jupyter notebooks上传文件夹或大量数据到服务器
2020/04/14 Python
Django框架获取form表单数据方式总结
2020/04/22 Python
Python 将 QQ 好友头像生成祝福语的实现代码
2020/05/03 Python
美国睫毛、眉毛精华液领导品牌:RevitaLash Cosmetics
2018/03/26 全球购物
城市观光通行证:The Sightseeing Pass
2018/04/28 全球购物
台湾良兴购物网:EcLife
2019/12/01 全球购物
室内设计自我鉴定
2013/10/15 职场文书
《金钱的魔力》教学反思
2014/02/24 职场文书
大学感恩节活动策划方案
2014/10/11 职场文书
jQuery class属性操作addClass()与removeClass()、hasClass()、toggleClass()
2021/03/31 jQuery