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的起点教程
Jan 13 Javascript
JQuery为textarea添加maxlength属性的代码
Apr 07 Javascript
javascript获取和判断浏览器窗口、屏幕、网页的高度、宽度等
May 08 Javascript
Angularjs中如何使用filterFilter函数过滤
Feb 06 Javascript
javascript简单判断输入内容是否合法的方法
May 11 Javascript
Bootstrapvalidator校验、校验清除重置的实现代码(推荐)
Sep 28 Javascript
详解AngularJS验证、过滤器、指令
Jan 04 Javascript
基于JavaScript实现购物车功能
Feb 07 Javascript
js使用原型对象(prototype)需要注意的地方
Aug 28 Javascript
详解vue-cli@2.x项目迁移日志
Jun 06 Javascript
微信小程序实现收货地址左滑删除
Nov 18 Javascript
vue实现商品列表的添加删除实例讲解
May 14 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
PHP5与MySQL数据库操作常用代码 收集
2010/03/21 PHP
PHP中获取内网用户MAC地址(WINDOWS/linux)的实现代码
2011/08/11 PHP
smarty简单分页的实现方法
2014/10/27 PHP
php中异常处理方法小结
2015/01/09 PHP
PHP中捕获超时事件的方法实例
2015/02/12 PHP
CentOS下搭建PHP环境与WordPress博客程序的全流程总结
2016/05/07 PHP
PHP检查网站是否宕机的方法示例
2017/07/24 PHP
laravel框架语言包拓展实现方法分析
2019/11/22 PHP
php实现通过stomp协议连接ActiveMQ操作示例
2020/02/23 PHP
js select常用操作控制代码
2010/03/16 Javascript
Web开发者必备的12款超赞jQuery插件
2010/12/03 Javascript
Javascript学习笔记 delete运算符
2011/09/13 Javascript
js中的this关键字详解
2013/09/25 Javascript
NodeJS中Buffer模块详解
2015/01/07 NodeJs
JS实现仿QQ聊天窗口抖动特效
2015/05/10 Javascript
谈谈第三方App接入微信登录 解读
2016/12/27 Javascript
javascript ASCII和Hex互转的实现方法
2016/12/27 Javascript
axios学习教程全攻略
2017/03/26 Javascript
JS实现弹出下载对话框及常见文件类型的下载
2017/07/13 Javascript
原生JavaScript之es6中Class的用法分析
2020/02/23 Javascript
在Vue 中实现循环渲染多个相同echarts图表
2020/07/20 Javascript
[04:07]显微镜下的DOTA2第八期——英雄复活动作
2014/06/24 DOTA
浅谈python中列表、字符串、字典的常用操作
2017/09/19 Python
python实现车牌识别的示例代码
2019/08/05 Python
Django 项目重命名的实现步骤解析
2019/08/14 Python
pytorch方法测试详解——归一化(BatchNorm2d)
2020/01/15 Python
利用canvas实现图片压缩的示例代码
2018/07/17 HTML / CSS
美发店5.1活动方案
2014/01/24 职场文书
公务员保密承诺书
2014/03/27 职场文书
安全保证书范文
2014/04/29 职场文书
演讲比赛的活动方案
2014/08/28 职场文书
领导班子遵守党的政治纪律情况对照检查材料
2014/09/26 职场文书
商场营业员岗位职责
2015/04/14 职场文书
八年级物理教学反思
2016/02/19 职场文书
工人先锋号事迹材料(2016精选版)
2016/03/01 职场文书
Python实现Excel文件的合并(以新冠疫情数据为例)
2022/03/20 Python