canvas实现粒子的拖尾效果

/*** @Author   SuZhe* @DateTime 2019-03-15* @desc     兼容 requestAnimFrame* @return   {[Function]}    requestAnimFrame不兼容的浏览器使用定时器代替*/
window.requestAnimFrame = (function(){return  window.requestAnimationFrame       ||window.webkitRequestAnimationFrame ||window.mozRequestAnimationFrame    ||function( callback ){window.setTimeout(callback, 1000 / 60);};
})();/**
* @Author   SuZhe
* @DateTime 2019-03-15
* @desc     椭圆动画效果  star运动
* @param    {[Object]}   canvasId [画布布id]
*/
function CanvasAnimation(param){if(param.ele){this.canvas = param.ele;this.cxt = this.canvas.getContext('2d');this.param = param;if(param.type){//starthis.starArr = [[],[],[],[]];  //star数量集合this.step = [80,-40,40,260];  //步长位置集合this.color = ['230,116,182','80,238,207','235,149,89','68,192,240']; //颜色集合}else{// arcthis.a = 168; //长 半 径this.b = 53;  //短 半 径this.posi = []; //位置集合this.posiNext = [];this.radius = 2;this.time = 0; //步长}this.animation();}
}
CanvasAnimation.prototype = {animation: function(){var that = this;if(this.param.type){//starthis.starAni();}else{//arcthis.draw();this.drawNext();}window.requestAnimFrame(function(){that.animation();});},draw: function(){var y = 56,posi = this.posi;this.cxt.clearRect(0,0,340,160);this.trail(y,posi);this.time+=0.02;},drawNext: function(){var y = 106,posi = this.posiNext;this.trail(y,posi,true);},trail: function(y,posi,next){var context = this.cxt,x = 170,a,b,param = {};if(next){a = -this.a;b = -this.b;}else{a = this.a;b = this.b;}//圆弧坐标param.arcX = x + a*Math.cos(this.time),param.arcY = y + b*Math.sin(this.time);posi.push(param);if(posi.length > 25){posi.shift();}for(var i = 0, len = posi.length; i < len; i++){var alphar = 1;if(i < len-1){alphar = i/30;}if(next){context.fillStyle="rgba(255, 204, 0, "+alphar+")";}else{context.fillStyle="rgba(0, 246, 255, "+alphar+")";}context.beginPath();context.arc(posi[i].arcX,posi[i].arcY,this.radius,0,2*Math.PI);context.closePath();context.fill();}},starAni: function(){var context = this.cxt,posi = this.starArr,starNum = [{},{},{},{}];context.clearRect(0,0,700,462);for(var k = 0, lens = starNum.length; k < lens; k++){starNum[k].x = 90 * k * 2 + 40;starNum[k].y = 462 - this.step[k];if(starNum[k].y < 0){this.step[k] = 0;}posi[k].push(starNum[k]);if(posi[k].length > 45){posi[k].shift();}for(var j = 0, len = posi[k].length; j < len; j++){var alphar = 1,redius = 2.5;if(j < len - 1){alphar = j/50;redius = j/48 *2 ;}if(j == len-1){context.shadowOffsetY=-2;context.shadowOffsetX=0;context.shadowBlur=10;context.shadowColor="rgb("+this.color[k]+")";}context.fillStyle="rgba("+this.color[k]+", "+alphar+")";context.beginPath();context.arc(posi[k][j].x,posi[k][j].y,redius,0,2*Math.PI);context.closePath();context.fill();}this.step[k] += 2;}}
}
<canvas class="canvas" width="340" height="160"></canvas>var arc = new CanvasAnimation({ele:document.getElementsByClassName('canvas')[0]});
<canvas class="canvasStar" width="700" height="462"></canvas>var star = new CanvasAnimation({ele: document.getElementsByClassName('canvasStar')[0],type: 'star'});

canvas拖尾效果相关推荐

  1. html鼠标拖尾效果,javascript canvas拖尾效果

    {$title} var lujinglist = []; //制作路径 for (var x = 10; x <= 300; x++) { var dian = [x, 50]; lujing ...

  2. HTML5 canvas 拖尾效果(或尾巴 或方向标 或留痕。。。)

    [canvas]带拖尾效果的旋转扩散 使用 HTML5 canvas 制作一个圆形的拖尾,以及附加上拖尾的扩散效果 我说说的拖尾,就是拖着一个尾巴,其他简短的名词暂时想不到了.下图效果弄出来,着实费劲 ...

  3. Cocos Creator 的实现拖尾效果

    在游戏中,有时会需要在某个游戏对象上加上移动后的轨迹若隐若现的效果.使得游戏的效果较好,比如游戏大招,刀光,法术,流星划痕之类. Cocos Creator提供了一种内置的拖尾渐隐效果的实现方法:组件 ...

  4. shader拖尾_插件(一)武器拖尾效果

    工作交接的空余时间,刚好有空,就有兴趣看了看U3D的武器拖尾功能,没想到有插件.下载地址: Pocket+RPG+Weapon+Trails.unitypackage PocketRPG Trails ...

  5. Processing残影拖尾效果实现套路分享

    今天小菜给大家分享下实现残影.拖尾效果的几种实现思路,或者叫固定套路,保准大家认真看完后,以后再也不怕实现残影.拖尾效果了. 本文字数比较多,且部分内容需要阅读代码加以思考,预计阅读10-15分钟.( ...

  6. Unity Shader - GrabPass 实现武器热扭曲拖尾效果

    文章目录 先来看看效果 实现思路 Unity带的TrailRender组件 编写脚本实现 CSharp Shader 参数 注意性能 还可以优化 总结 Project 以前龙之谷喜欢选战士,帅气. 战 ...

  7. Unity初级案例-愤怒的小鸟:四:11解决重复划线和小鸟轮换速度突然变大的问题+12添加小鸟飞出的拖尾效果+13整合场景和解决无法显示划线弹弓的问题

    目录 一.目的 1.想知道:愤怒的小鸟:如何制作 2.做好学习笔记,方便下次查看 二.参考 1.SIKI学院 三.注意 1.版本 操作:1:11解决重复划线和小鸟轮换速度突然变大的问题 1.GameM ...

  8. 纯js实现鼠标拖尾效果(好玩又简单,一学就会)

    js特效-鼠标滑动的拖尾效果 <script>//鼠标移动事件(document范围内移动)document.onmousemove=function(event){//1.创建divva ...

  9. 游戏中实现鼠标拖尾效果

    游戏中使用Trail Renderer这个通过设置参数来实现拖尾效果,通过在update中吧鼠标的点击的路径给怪哉这个得物体. 转载于:https://www.cnblogs.com/qinshuai ...

最新文章

  1. layui ajax流加载,layui中流加载layui.flow
  2. SSH错误:packet_write_wait: Connection to 10.57.19.250 port 22: Broken pipe
  3. 新站SEO优化如何吸引搜索引擎蜘蛛的爬行?
  4. Could not find artifact com.sun:tools:jar:1.5.0 解决办法
  5. java json自定义_java返回json设置自定义的格式
  6. ora-01740: 标识符中缺失双引号_sql语句中单引号的使用
  7. 京东健康APP内测版已上线各大安卓应用商店
  8. 梳子刻字刻什么好_石阶上被刻了1700多个汉字,网友狂赞!
  9. lede lcd4Linux,HLK7688A开发板,刷官方LEDE的LINKIT固件可以开机,但同样的uboot下,烧写原版代码自己编译的固件就会panic,无法识别文...
  10. MySQL免安装版 图文教程【5.7版本,纯净版win7安装】
  11. java 牙位图插件_牙医的骄傲-智能牙位图中文医疗应用app全球排名No.1
  12. 用u盘安装mysql,奥维互动地图企业服务器基本环境安装 ——U盘引导安装CentOS 6.5...
  13. 区块链专利全球第一竟是它?
  14. 指数分布在生活中的应用_概率论中指数分布的应用
  15. 监督学习算法的发展史和它们之间的关系:从文氏图到回归、决策树、支持向量机和人工神经网络...
  16. docker 安装 shipyard(中文版) 集群管理平台
  17. python爬虫下载小说
  18. 五、python实现人工蜂群算法(简单明了版)
  19. C 语言 宏定义 :字符串化 stringify 的应用
  20. 微信小程序怎么判断是从哪个页面跳转进来的

热门文章

  1. 动态规划入门到熟悉,看不懂来打我啊
  2. 庆贺计算机系60周年的校友贺信,校友会贺信
  3. 开始使用SmartDraw绘制开发中的各种图形
  4. SYN Cookies 技术
  5. 数量乘单价秋金额的计算机公式,“excle函数公式 数量乘单价“Excel表格中,总计栏怎么设置每一行的数量乘以金额的总和?求公式...
  6. DataGrip配置设定
  7. 随着交互能力的升级,AI在C端的落地会越来越深
  8. Struts2-04登录案例
  9. 个人博客前后端以及部署的实现
  10. 盛科广告传媒分析网络推广的优势