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 相关文章推荐
javascript脚本调试方法小结
Nov 24 Javascript
JS 用6N±1法求素数 实例教程
Oct 20 Javascript
关于Jqzoom的使用心得 jquery放大镜效果插件
Apr 12 Javascript
JQuery的read函数与js的onload不同方式实现
Mar 18 Javascript
Jquery中基本选择器用法实例详解
May 18 Javascript
使用canvas实现仿新浪微博头像截取上传功能
Sep 02 Javascript
jquery实现触发时更新下拉列表内容的方法
Dec 02 Javascript
jQuery easyUI datagrid 增加求和统计行的实现代码
Jun 01 Javascript
Vue.js自定义指令的用法与实例解析
Jan 18 Javascript
javascript数据类型详解
Feb 07 Javascript
在angular 6中使用 less 的实例代码
May 13 Javascript
JavaScript实现滑块验证解锁
Jan 07 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
在任意字符集下正常显示网页的方法二(续)
2007/04/01 PHP
浅析PHP的ASCII码转换类
2013/07/05 PHP
thinkPHP中钩子的使用方法实例分析
2017/11/16 PHP
PHP验证类的封装与使用方法详解
2019/01/10 PHP
学习ExtJS form布局
2009/10/08 Javascript
js indexOf()定义和用法
2012/10/21 Javascript
js图片滚动效果时间可随意设定当鼠标移上去时停止
2014/06/26 Javascript
WebApi+Bootstrap+KnockoutJs打造单页面程序
2016/05/16 Javascript
javaScript事件学习小结(四)event的公共成员(属性和方法)
2016/06/09 Javascript
BootStrap 轮播插件(carousel)支持左右手势滑动的方法(三种)
2016/07/07 Javascript
jquery结合html实现中英文页面切换
2016/11/29 Javascript
JavaScript中的普通函数和箭头函数的区别和用法详解
2017/03/21 Javascript
BootStrap下的弹出框加载select2框架失败的解决方法
2017/08/31 Javascript
详解Vue 事件修饰符capture 的使用
2017/12/29 Javascript
对vue.js中this.$emit的深入理解
2018/02/23 Javascript
Vue-router 中hash模式和history模式的区别
2018/07/24 Javascript
微信小程序生成分享海报方法(附带二维码生成)
2019/03/29 Javascript
vue 实现超长文本截取,悬浮框提示
2020/07/29 Javascript
[03:54]DOTA2英雄梦之声_第06期_昆卡
2014/06/23 DOTA
使用Python将数组的元素导出到变量中(unpacking)
2016/10/27 Python
python实现发送邮件功能代码
2017/12/14 Python
Pandas:DataFrame对象的基础操作方法
2018/06/07 Python
Python实现的爬取小说爬虫功能示例
2019/03/30 Python
Python3多目标赋值及共享引用注意事项
2019/05/27 Python
django 环境变量配置过程详解
2019/08/06 Python
解决Django提交表单报错:CSRF token missing or incorrect的问题
2020/03/13 Python
python语音识别指南终极版(有这一篇足矣)
2020/09/09 Python
Python排序函数的使用方法详解
2020/12/11 Python
用CSS禁用输入法(CSS3 UI规范)实例解析
2012/12/04 HTML / CSS
amaze ui 的使用详细教程
2020/08/19 HTML / CSS
阿迪达斯荷兰官方网站:adidas荷兰
2018/03/16 全球购物
学校校庆演讲稿
2014/05/22 职场文书
公司员工体检通知
2015/04/21 职场文书
毕业论文致谢格式模板
2015/05/14 职场文书
圣诞晚会主持词开场白
2015/05/28 职场文书
Python爬虫之爬取某文库文档数据
2021/04/21 Python