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中getElementsByClassName不能用的问题解决方法
Aug 26 Javascript
jquery网页回到顶部效果(图标渐隐,自写)
Jun 16 Javascript
14个有用的Jquery技巧分享
Jan 08 Javascript
jQuery实现内容定时切换效果完整实例
Apr 06 Javascript
JS正则RegExp.test()使用注意事项(不具有重复性)
Dec 28 Javascript
React创建组件的三种方式及其区别
Jan 12 Javascript
使用vue.js实现checkbox的全选和多个的删除功能
Feb 17 Javascript
ES6正则的扩展实例详解
Apr 25 Javascript
基于axios封装fetch方法及调用实例
Feb 05 Javascript
[原创]jquery判断元素内容是否为空的方法
May 04 jQuery
jquery实现简易验证插件封装
Sep 13 jQuery
vue使用video插件vue-video-player的示例
Oct 03 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
php4的彩蛋
2006/10/09 PHP
利用PHP实现与ASP Banner组件相似的类
2006/10/09 PHP
php 使用file_get_contents读取大文件的方法
2014/11/13 PHP
支持png透明图片的php生成缩略图类分享
2015/02/08 PHP
typecho插件编写教程(二):写一个新插件
2015/05/28 PHP
php实现网页缓存的工具类分享
2015/07/14 PHP
PHP正则匹配反斜杠'\'和美元'$'的方法
2017/02/08 PHP
Ajax+PHP实现的分类列表框功能示例
2019/02/11 PHP
High Performance JavaScript(高性能JavaScript)读书笔记分析
2011/05/05 Javascript
如何在一个页面显示多个百度地图
2013/04/07 Javascript
js控制frameSet示例
2013/09/10 Javascript
javascript实现完美拖拽效果
2015/05/06 Javascript
浅析js绑定事件的常用方法
2016/05/15 Javascript
vue 微信授权登录解决方案
2018/04/10 Javascript
vue通过点击事件读取音频文件的方法
2018/05/30 Javascript
vue下载excel的实现代码后台用post方法
2019/05/10 Javascript
layer实现登录弹框,登录成功后关闭弹框并调用父窗口的例子
2019/09/11 Javascript
nodejs制作小爬虫功能示例
2020/02/24 NodeJs
工作中常用js功能汇总
2020/11/07 Javascript
vue 图片裁剪上传组件的实现
2020/11/12 Javascript
[02:41]《西雅图我们来了》2015国际邀请赛出征全记录
2015/07/23 DOTA
[00:39]DOTA2上海特级锦标赛 Liquid战队宣传片
2016/03/04 DOTA
[02:22]《新闻直播间》2017年08月14日
2017/08/15 DOTA
使用Python处理Excel表格的简单方法
2018/06/07 Python
python使用matplotlib库生成随机漫步图
2018/08/27 Python
对python:print打印时加u的含义详解
2018/12/15 Python
如何使用python爬虫爬取要登陆的网站
2019/07/12 Python
Python Django切换MySQL数据库实例详解
2019/07/16 Python
python判断自身是否正在运行的方法
2019/08/08 Python
Python如何使用队列方式实现多线程爬虫
2020/05/12 Python
Django实现简单的分页功能
2021/02/22 Python
UNIX操作系统结构由哪几部分组成
2016/02/17 面试题
《童年》教学反思
2014/02/18 职场文书
《微笑着面对生活》优秀演讲稿范文
2014/09/23 职场文书
男方家长婚礼致辞
2015/07/27 职场文书
少年的你:世界上没有如果,要在第一次就勇敢的反抗
2019/11/20 职场文书