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. haskell的分数运算
  2. 多线程编程(3) - 多线程同步之 CriticalSection(临界区)
  3. Java温故而知新(1)集合类
  4. java标识符与关键字_4、Java标识符和关键字
  5. 第三篇 12306自动刷票下单-下单
  6. ABAP 的历史,现在,和未来的讨论
  7. 程序员常见的坏习惯,你躺枪了吗?
  8. docker linux 快速开窗口_Linux搭建docker环境并简单实用
  9. python分析BOSS直聘的某个招聘岗位数据
  10. 【转】Google Maps Android API V2的使用及问题解决
  11. Running 1 linux_yesterdaytodaytomorrow
  12. 如何生成指定范围不重复的随机数数组
  13. Ubuntu命令整理
  14. 微星MSI电脑(GL63 8RE-416CN)打开BIOS隐藏的高级设置方法
  15. learn words by steps 8 英语单词
  16. ARM学习系列 ---- ARM公司简介
  17. 【视频制作表情包】能直接添加文字的表情包制作工具
  18. 创客教育的起源和内涵的基本理念
  19. 后端php接口,PHP_TP5框架开发后端接口(代码编写思路)
  20. 国外软件外包项目网站(适用软件兼职)国外威客网站大盘点

热门文章

  1. 习惯---哈佛大学推荐20个快乐的习惯
  2. 个人学习笔记——庄懂的技术美术入门课(美术向)12
  3. 想用好虚幻4引擎做游戏,你需要避免这些扰人的坑
  4. role 的组织方式
  5. 神经网络从被人忽悠到忽悠人(二)
  6. mediumtext_text长度不够用,改为mediumtext感觉 又太大,有没什么方法?
  7. ORA-28547:连接服务器失败,可能是Oracle Net 管理错误
  8. 如何判断一个对象是否为空{}
  9. 自定义控件:快速索引
  10. 潍坊医疗系统计算机面试题,2018潍坊医疗卫生系统考试经验分享:结构化面试要注意什么?...