您现在的位置是:网站首页> 编程资料编程资料
html5 canvas 实现光线沿不规则路径运动html5实现点击弹出图片功能html5 录制mp3音频支持采样率和比特率设置html5表单的required属性使用html5调用摄像头实例代码HTML5页面音频自动播放的实现方式Html5大屏数据可视化开发的实现html实现弹窗的实例HTML5来实现本地文件读取和写入的实现方法HTML 罗盘式时钟的实现HTML5简单实现添加背景音乐的几种方法
2021-08-30
1103人已围观
简介 这篇文章主要介绍了html5 canvas 实现光线沿不规则路径运动,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
svg让动画沿着不规则路径运动
查阅svg文档后发现,svg动画运动有两种实现方式,且都非常简单,但对于100%实现设计师给出的效果有很大的距离
使用offset-path偏移路径和offset-roate偏移角度让元素沿着不规则路径走
offset-path/offset-roate 路径偏移
角度偏移
此种方式的限制是滚动元素无法随路径进行没有规律的变化
使用stroke-dasharray和stroke-dashoffset让路径边线动起来
stroke-dasharray:设置shap和text 边框虚线的实线长度与实线之间的间隔(虚线长度)
stroke-dashoffser:设置边框线条相对于默认位置的偏移(正值:向左,负值:向右)
stroke-dasharray/stroke-dashoffser 设置stroke-dasharray
storke-dasharray设置为80 ,此时实线和实线间隔一样storke-dasharray设置为80 320,此时实线和是实线间隔的1/4设置stroke-dashoffset让边线相对于初始位置发生偏移
通过设置stroke-dasharray 和 stroke-dashoffset让边线动起来
此种方式通过边框偏移的效果可以设置跟随路径的滚线条,但是无法设置线条的光线效果,即实线的阴影和实线的渐变效果(渐变区域需随着偏移路径的变化而变化)
canvas实现线条延不规则路径运动
线条实现
对于不规则路径,如果直接用画线条的方式实现光线,需要计算每一个开始点和结束点的位置,中间还可能存在转折点,计算起来非常麻烦,不可取
故这边采取canvas组合图形的模式,取线条和一个图形重叠部分(类似于灯罩)来实现光线效果
组合前

组合后

canvas实现不规则路径光效
让线条动起来
当我们实现好线条剩下就需要让线条动起来,由于线条是通过灯罩的方式来实现的,让线条运动只需要让灯罩动起来就好

canvas实现不规则路径光效
这种实现方式也有一定的条件限制,那就是路径可大体抽象成为一个有一定规律的图型或者线条,比如上面demo中路径可抽象成为一个矩形的两边,或者是2条连接的直线
我们必须从没有具体规则的路径中抽象出一个大体的规则,不同路径规则不同
上面的例子就是将不规则路径抽象成了一个直角的规则路径

可优化点
这边找到了2个可优化的点
1.时间方向上: 为了让动画消耗较小,代码中的定时器已经用的是requestAnimationFrame, 但是由于光线的特殊性(自带模糊效果),为了性能更加,尝试了2次requestAnimationFrame调用一次绘图的方式,效果较前者未有明显区别
2.绘图方向上: 从上图可发现,灯罩每次只圈出路径的一部分,故绘图中不需要每次都绘制全部路径,只需要找出灯罩前后的路径点,将这一段路径绘制出来就好
坑点
在完成这个动动画效果之后遇到一个至今原因不明的bug,随着屏幕放置时间的变长,动画越来越慢,打开任务管理器,未见内存泄漏或者cpu使用率过高。打开performance,发现页面调帧严重,屏幕帧数越来越低,单个Frame CPU time越来越长,范围来看,script和render和paint耗时未发生线性变化,只有system时间越来越来长,越来越长,期望能被大佬告知原因
一开始

到后来

解决的办法较为...,光线每循环一个周期,我销毁了之前的canvas并新建了canvas,上层规避了system time不知道为什么越来越长的问题
chrome版本:80.0.3987.163(正式版本) (64 位)
到此这篇关于html5 canvas 实现光线沿不规则路径运动的文章就介绍到这了,更多相关canvas 光线不规则运动内容请搜索以前的文章或继续浏览下面的相关文章,希望大家以后多多支持!
相关内容
- 基于HTML5+tracking.js实现刷脸支付功能HTML5仿微信支付页面代码详解Html5微信支付爬坑之路html5仿支付宝密码框的实现代码
- HTML中meta标签及KeywordsHTML常用meta大全(推荐)移动端专用的meta标签设置大全HTML中的<meta>标签的使用详解html中meta标签及用法详解HTML标签meta总结,HTML5 head meta 属性整理dreamweaver cs5不写写代码怎么添加meta标签?HTML5各种头部meta标签的功能(推荐)
- 详解移动端h5页面根据屏幕适配的四种方案Html5移动端适配IphoneX等机型的方法html5实现移动端适配完美写法
- html5移动端自适应布局的实现HTML页面自适应宽度的table(表格)HTML5 body设置自适应全屏HTML5 textarea高度自适应的两种方案关于html选择框创建占位符的问题
- HTML里显示pdf、word、xls、ppt的方法示例使用PDF.JS插件在HTML中预览PDF文件的方法利用html5 file api读取本地文件示例(如图片、PDF等)HTML5在线预览PDF的示例代码html转换为pdf案例的一些总结(多图推荐)
- HTML5 直播疯狂点赞动画实现代码 附源码html5+canvas仿抖音直播爱心飘动点赞动画特效源码HTML5+SVG实现17种炫酷点赞图标动画功能特效源码
- HTML5手指下滑弹出负一屏阻止移动端浏览器内置下拉刷新功能的实现代码html5实现点击弹出图片功能html5 录制mp3音频支持采样率和比特率设置html5表单的required属性使用html5调用摄像头实例代码HTML5页面音频自动播放的实现方式Html5大屏数据可视化开发的实现html实现弹窗的实例HTML5来实现本地文件读取和写入的实现方法HTML 罗盘式时钟的实现HTML5简单实现添加背景音乐的几种方法
- recorder.js 基于Html5录音功能的实现HTML5录音实践总结(Preact)HTML5网页录音和上传到服务器支持PC、Android,支持IOS微信功能html5录音功能实战示例详解HTML5 录音的踩坑之旅
- HTML5+CSS设置浮动却没有动反而在中间且错行的问题html/css中float浮动的用法实例详解HTML5 CSS3实现七彩变换的天空中白云漂浮动画效果源码html+css 清除浮动的相关技巧心得Html+CSS浮动的广告条实现分解基于jQuery+CSS实现的浮动html菜单效果分享代码
- html5中嵌入视频自动播放的问题解决html5 video全屏播放/自动播放的实现示例html5自动播放mov格式视频的实例代码解决HTML5中的audio在手机端和微信端的不能自动播放问题HTML5 解决苹果手机不能自动播放音乐问题有关HTML5中背景音乐的自动播放功能HTML5页面音视频在微信和app下自动播放的实现方法HTML5页面音频自动播放的实现方式
