canvas拖尾效果
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拖尾效果相关推荐
- html鼠标拖尾效果,javascript canvas拖尾效果
{$title} var lujinglist = []; //制作路径 for (var x = 10; x <= 300; x++) { var dian = [x, 50]; lujing ...
- HTML5 canvas 拖尾效果(或尾巴 或方向标 或留痕。。。)
[canvas]带拖尾效果的旋转扩散 使用 HTML5 canvas 制作一个圆形的拖尾,以及附加上拖尾的扩散效果 我说说的拖尾,就是拖着一个尾巴,其他简短的名词暂时想不到了.下图效果弄出来,着实费劲 ...
- Cocos Creator 的实现拖尾效果
在游戏中,有时会需要在某个游戏对象上加上移动后的轨迹若隐若现的效果.使得游戏的效果较好,比如游戏大招,刀光,法术,流星划痕之类. Cocos Creator提供了一种内置的拖尾渐隐效果的实现方法:组件 ...
- shader拖尾_插件(一)武器拖尾效果
工作交接的空余时间,刚好有空,就有兴趣看了看U3D的武器拖尾功能,没想到有插件.下载地址: Pocket+RPG+Weapon+Trails.unitypackage PocketRPG Trails ...
- Processing残影拖尾效果实现套路分享
今天小菜给大家分享下实现残影.拖尾效果的几种实现思路,或者叫固定套路,保准大家认真看完后,以后再也不怕实现残影.拖尾效果了. 本文字数比较多,且部分内容需要阅读代码加以思考,预计阅读10-15分钟.( ...
- Unity Shader - GrabPass 实现武器热扭曲拖尾效果
文章目录 先来看看效果 实现思路 Unity带的TrailRender组件 编写脚本实现 CSharp Shader 参数 注意性能 还可以优化 总结 Project 以前龙之谷喜欢选战士,帅气. 战 ...
- Unity初级案例-愤怒的小鸟:四:11解决重复划线和小鸟轮换速度突然变大的问题+12添加小鸟飞出的拖尾效果+13整合场景和解决无法显示划线弹弓的问题
目录 一.目的 1.想知道:愤怒的小鸟:如何制作 2.做好学习笔记,方便下次查看 二.参考 1.SIKI学院 三.注意 1.版本 操作:1:11解决重复划线和小鸟轮换速度突然变大的问题 1.GameM ...
- 纯js实现鼠标拖尾效果(好玩又简单,一学就会)
js特效-鼠标滑动的拖尾效果 <script>//鼠标移动事件(document范围内移动)document.onmousemove=function(event){//1.创建divva ...
- 游戏中实现鼠标拖尾效果
游戏中使用Trail Renderer这个通过设置参数来实现拖尾效果,通过在update中吧鼠标的点击的路径给怪哉这个得物体. 转载于:https://www.cnblogs.com/qinshuai ...
最新文章
- haskell的分数运算
- 多线程编程(3) - 多线程同步之 CriticalSection(临界区)
- Java温故而知新(1)集合类
- java标识符与关键字_4、Java标识符和关键字
- 第三篇 12306自动刷票下单-下单
- ABAP 的历史,现在,和未来的讨论
- 程序员常见的坏习惯,你躺枪了吗?
- docker linux 快速开窗口_Linux搭建docker环境并简单实用
- python分析BOSS直聘的某个招聘岗位数据
- 【转】Google Maps Android API V2的使用及问题解决
- Running 1 linux_yesterdaytodaytomorrow
- 如何生成指定范围不重复的随机数数组
- Ubuntu命令整理
- 微星MSI电脑(GL63 8RE-416CN)打开BIOS隐藏的高级设置方法
- learn words by steps 8 英语单词
- ARM学习系列 ---- ARM公司简介
- 【视频制作表情包】能直接添加文字的表情包制作工具
- 创客教育的起源和内涵的基本理念
- 后端php接口,PHP_TP5框架开发后端接口(代码编写思路)
- 国外软件外包项目网站(适用软件兼职)国外威客网站大盘点
热门文章
- 习惯---哈佛大学推荐20个快乐的习惯
- 个人学习笔记——庄懂的技术美术入门课(美术向)12
- 想用好虚幻4引擎做游戏,你需要避免这些扰人的坑
- role 的组织方式
- 神经网络从被人忽悠到忽悠人(二)
- mediumtext_text长度不够用,改为mediumtext感觉 又太大,有没什么方法?
- ORA-28547:连接服务器失败,可能是Oracle Net 管理错误
- 如何判断一个对象是否为空{}
- 自定义控件:快速索引
- 潍坊医疗系统计算机面试题,2018潍坊医疗卫生系统考试经验分享:结构化面试要注意什么?...