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 相关文章推荐
jQuery中文入门指南,翻译加实例,jQuery的起点教程
Feb 09 Javascript
获取JavaScript用户自定义类的类名称的代码
Mar 08 Javascript
基于Jquery的实现回车键Enter切换焦点
Sep 14 Javascript
Javascript根据指定下标或对象删除数组元素
Dec 21 Javascript
js交换排序 冒泡排序算法(Javascript版)
Oct 04 Javascript
jquery实现页面加载效果
Feb 21 Javascript
AngularJS实现select的ng-options功能示例
Jul 12 Javascript
JS排序算法之希尔排序与快速排序实现方法
Dec 12 Javascript
Vue 让元素抖动/摆动起来的实现代码
May 31 Javascript
对vue事件的延迟执行实例讲解
Aug 28 Javascript
JS尾递归的实现方法及代码优化技巧
Jan 19 Javascript
微信小程序跨页面数据传递事件响应实现过程解析
Dec 19 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实现按照权重随机排序数据的方法
2015/01/09 PHP
PHP获取毫秒级时间戳的方法
2015/04/15 PHP
PHP使用token防止表单重复提交的方法
2016/04/07 PHP
层序遍历在ExtJs的TreePanel中的应用
2009/10/16 Javascript
MultiSelect左右选择控件的设计与实现介绍
2013/06/08 Javascript
js导出table到excel同时兼容FF和IE示例
2013/09/03 Javascript
javascript自定义startWith()和endWith()的两种方法
2013/11/11 Javascript
jquery下拉select控件操作方法分享(jquery操作select)
2014/03/25 Javascript
IE下通过a实现location.href 获取referer的值
2014/09/04 Javascript
浅谈Javascript中匀速运动的停止条件
2014/12/19 Javascript
JavaScript设计模式之外观模式介绍
2014/12/28 Javascript
javascript模拟php函数in_array
2015/04/27 Javascript
javascript 解决浏览器不支持的问题
2016/09/24 Javascript
微信小程序 canvas API详解及实例代码
2016/10/08 Javascript
js数组去重的hash方法
2016/12/22 Javascript
jQuery插件FusionCharts绘制2D环饼图效果示例【附demo源码】
2017/04/10 jQuery
angularJs-$http实现百度搜索时的动态下拉框示例
2018/02/27 Javascript
layui table 参数设置方法
2018/08/14 Javascript
jQuery模拟html下拉多选框的原生实现方法示例
2019/05/30 jQuery
node+multer实现图片上传的示例代码
2020/02/18 Javascript
python中的sort方法使用详解
2014/07/25 Python
Python解析、提取url关键字的实例详解
2018/12/17 Python
使用python serial 获取所有的串口名称的实例
2019/07/02 Python
详解python内置常用高阶函数(列出了5个常用的)
2020/02/21 Python
Python3监控windows,linux系统的CPU、硬盘、内存使用率和各个端口的开启情况详细代码实例
2020/03/18 Python
详解如何在PyCharm控制台中输出彩色文字和背景
2020/08/17 Python
python读取excel数据绘制简单曲线图的完整步骤记录
2020/10/30 Python
html5 拖拽上传图片实例演示
2013/04/01 HTML / CSS
大学生入党自我鉴定
2013/10/31 职场文书
租房合同协议书
2014/04/09 职场文书
雷锋式好少年事迹材料
2014/08/17 职场文书
公安派出所所长四风问题个人对照检查材料
2014/10/04 职场文书
护士长2014年度工作总结
2014/11/11 职场文书
2014年英语工作总结
2014/12/20 职场文书
《最后一头战象》读后感:动物也有感情
2020/01/02 职场文书
Python基础之tkinter图形化界面学习
2021/04/29 Python