为什么80%的码农都做不了架构师?>>>   

第一次写canvas相关的脚本,点击页面可以产生新的扩散点,并整体颜色变换,可以根据输入数字变换粒子大小,

预览地址:http://runjs.cn/code/58mct5yo

<!-- lang: js -->
/*

*@author-fanqie dc2002007@163.com */ window.requestAnimFrame = (function(){ return window.requestAnimationFrame || window.webkitRequestAnimationFrame || window.mozRequestAnimationFrame || function( callback ){ window.setTimeout(callback, 1000 / 60); }; })(); var openBtn=document.getElementById('J_open_btn'); var clearBtn=document.getElementById('J_clear_btn'); var runState=true; //打开关闭 openBtn.addEventListener("click",function(e){ thisBtn=e.target; if(runState==false){ runState=true; thisBtn.innerHTML="停止"; }else{ runState=false; thisBtn.innerHTML="继续"; } }); //J_clear_btn clearBtn.addEventListener("click",function(e){ liziDrawObj.destory(); runState=true; thisBtn.innerHTML="停止"; }); var mycanvas=document.getElementById('I_mycanvas'); mycanvas.height=window.innerHeight; mycanvas.width=window.innerWidth; var colors=['#00FF00','#FFFF00','#FF0000','#00CCFF']; var liziDrawClass=function(canvasObj,direction,directionVal,size,color){ this.canvasObj=canvasObj.getContext("2d"); this.direction=direction;//left top bottom right this.directionVal=directionVal;//偏移量 this.size=size; this.color=color; this.liziItem=Array();//粒子对象集合 } liziDrawClass.prototype={ //初始化 init:function(){ liziDrawObj.factory(250,200); this.canvasObj.shadowColor=this.color; this.canvasObj.fillStyle=this.color; this.canvasObj.globalAlpha=this.size; this.canvasObj.shadowBlur=5; this.canvasObj.save(); }, //渲染画布 drawDraw:function(lizi){ this.canvasObj.beginPath();

    this.canvasObj.arc(lizi.positionX,lizi.positionY,this.size,0,2*Math.PI);this.canvasObj.fill();this.canvasObj.closePath();this.canvasObj.restore();
},
//更新画布
update:function(){for(index in liziDrawObj.liziItem){liziDrawObj.liziItem[index]=liziDrawObj.createNew(liziDrawObj.liziItem[index],5);var liziList= liziDrawObj.liziItem[index];for(current in liziList){lizi=liziList[current];//liziDrawObj.canvasObj.clearRect(0,0,window.innerWidth,window.innerHeight);liziDrawObj.drawDraw(lizi);}}
},//同时创建多个新粒子 为了加快粒子产生速度
createNew:function(liziList,count){lastLizi=liziList.pop();liziList=Array();liziList.push(lastLizi);for (var i = 0; i <count; i++) {lastLizi=liziList[liziList.length-1];var liziNew=new liziClass(lastLizi.size,lastLizi.color,lastLizi.direction,lastLizi.positionX,lastLizi.positionY,lastLizi.directionVal);liziNew.centerX=lastLizi.centerX;liziNew.centerY=lastLizi.centerY;liziNew.angle=lastLizi.angle+0.15;liziNew.directionVal=lastLizi.directionVal+0.05;cx= liziNew.centerX+Math.sin(liziNew.angle) * liziNew.directionVal;cy= liziNew.centerY+Math.cos(liziNew.angle) * liziNew.directionVal;liziNew.positionX=cx+Math.random();liziNew.positionY=cy+Math.random()*5;liziList.push(liziNew);};return liziList;
},
//生产粒子model
factory:function(positionX,positionY){var lizi=new liziClass(this.size, this.color,this.direction,positionX,positionY,this.directionVal);this.liziItem.push([lizi]);this.color=colors[parseInt(Math.random()*4,10)];this.canvasObj.shadowColor=this.color;this.canvasObj.fillStyle=this.color;this.canvasObj.save();
},destory:function(){this.canvasObj.clearRect(0,0,window.innerWidth,window.innerHeight);this.liziItem=new Array();
}

} var liziClass=function(size,color,movement,positionX,positionY,directionVal){ this.size=size; this.color=color; this.movement=movement; this.positionX=positionX; this.positionY=positionY; this.centerX=Number(positionX)-directionVal; this.centerY=Number(positionY)-directionVal; this.angle=0; this.directionVal=directionVal;//偏移量 }

liziClass.prototype={}

var liziDrawObj=new liziDrawClass(mycanvas,'left',10,1,'#f0e');
liziDrawObj.init();function loop(){if(runState){liziDrawObj.size=document.getElementById('J_size').value;liziDrawObj.update();}requestAnimFrame(loop);}
mycanvas.addEventListener("click",newPosition);
function newPosition(e){if(runState){liziDrawObj.factory(e.x,e.y);}
}
loop();
<!-- lang: html --><a href="javascript:;" id="J_open_btn">停止</a>

<a href="javascript:;" id="J_clear_btn">清空</a> 粒子大小<input value="1" id="J_size" class="sizeInput" /> <canvas id="I_mycanvas" class="mycanvas" > 不支持…… </canvas>

<!-- lang: css -->
.mycanvas{background: #000}
body{background: #eee}

.sizeInput{width: 2em;font-size:15px; }     

转载于:https://my.oschina.net/youa/blog/352820

canvas绘图粒子扩散效果【原创】相关推荐

  1. Javascript Canvas 实现粒子动画效果分享

    今天和大家一起分享一下用 canvas 实现粒子动画效果的实现,就像下图的效果 要实现这样的效果,我们首先需要一段包含了 canvas 的基础 html 代码 <!DOCTYPE html> ...

  2. html制作的动态粒子图像,一种基于AnimateCC+Canvas的随机粒子动画效果设计

    潘博 摘要:粒子动画是一种应用广泛的动画效果,也有不同的制作方法.Animate CC是Flash的延续和发展,在动画制作方面功能强大,而Canvas是HTML5在网页中绘制图形.制作动画的核心元素. ...

  3. 用HTML5 Canvas 做擦除及扩散效果

    2013年的时候曾经使用canvas实现了一个擦除效果的需求,即模拟用户在模糊的玻璃上擦除水雾看到清晰景色的交互效果.好在2012年的时候学习HTML5的时候研究过canvas了,所以在比较短的时间内 ...

  4. canvas 擦除动画_用HTML5 Canvas 做擦除及扩散效果

    2013年的时候曾经使用canvas实现了一个擦除效果的需求,即模拟用户在模糊的玻璃上擦除水雾看到清晰景色的交互效果.好在2012年的时候学习HTML5的时候研究过canvas了,所以在比较短的时间内 ...

  5. canvas文字粒子效果 html+css+js 3点饮茶,7点放工,美滋滋~

    先言:  今天3点多在饮茶的时候,发现有好几天没水文章了,但是太难的玩意又不会啊,咋办,突然想起电脑里还有存着一个文字粒子特效,好家伙,这不就来了,先看效果如下: 因为gif图最大5m,但是这东西演示 ...

  6. 基于canvas使用粒子拼出你想要的文字[2]——粒子的动画效果

    写在最前 本次分享一个用canvas粒子渲染文字的"完整"版实现,功能包括:随机粒子缓动动画,粒子汇聚.发散,并拼出你想要的文字.本文继续上面一节基于canvas使用粒子拼出你想要 ...

  7. 原生JS Canvas 粒子漂浮 效果 (详细注释)

    其实用Canvas 实现粒子效果 很简单. 知道 Canvas 怎么画出 圆形( arc 函数 ), 圆形的移动就是 arc 函数 定位参数变化的问题. // x.y 变化 并且 每帧重绘 ,让我们看 ...

  8. php 3d animation,如何用HTML5的Canvas制作3D动画效果

    HTML5的诞生给web前端界带来了不小轰动,像什么动画旋转.图片滑块.图片轮播等等这些3D特效,也引发了不少朋友想要学习HTML5的好奇心.最近我一直在做canvas动画效果,发现canvas这个东 ...

  9. canvas三角函数模拟水波效果

    原文:canvas三角函数模拟水波效果 最近项目中,ui设计了个水波效果的背景动画,然而并没有gif或svg动画,开始试着用css实现了一下,动画效果并不是很好,网上查了下基本都是用贝赛尔曲线实现,想 ...

最新文章

  1. 迷你书下载(持续更新中。。。)
  2. mysql lib_explode_这简直就是一个“定时炸弹”!记一次 MySQL 的奇葩故障
  3. maven整合@data注解_springboot整合spring Cache(redis)
  4. Nginx中添加gzip_static支持
  5. inventor如何钣金出弧面_SolidWorks如何在钣金弧面上雕刻公司名字?原来如此简单...
  6. CGAffineTransform
  7. Android查看真机布局,android-外部存储
  8. 7-177 输出全排列 (20 分)
  9. 制作一个状态栏中跑马灯效果_图标设计指南(3)——制作一个图标集所需全部信息(中)...
  10. 这家公司疑被查封、员工被带走,股东李笑来称“做天使投资人真不容易”
  11. 超级简单的jQuery纯手写五星评分效果
  12. bzoj 1257: [CQOI2007]余数之和sum
  13. Windows Phone 7 中BingMap控件的使用
  14. linux下载安装花生壳
  15. 简明python教程电子书下载_简明Python教程PDF电子书免费下载
  16. macOS Monterey 12.3.1 (21E258) 虚拟机 ISO 镜像
  17. C语言之取反和取相反数
  18. Hibernate annotation配置方式的MappedBy使用详解
  19. matlab两个运动同时进行,多体运动的matlab动画演示
  20. chmod 755 与chmod +x的区别

热门文章

  1. 数据库设计--名值模式(转)
  2. 谷歌和GitHub 联手提出新方法,提振软件供应链安全
  3. Oracle 警告:Weblogic 服务器中含有多个可遭远程利用的严重漏洞
  4. 美国发布“几乎无法入侵”的国家量子互联网蓝图,计划十年内出原型
  5. VMware Cloud Director 被曝严重漏洞,可导致黑客接管企业服务器
  6. 平时有没有使用xml和json
  7. Linux 系统 vim 编辑器使用简明教程
  8. java 异常处理 Throwable Error 和Exception
  9. dagger2 备注
  10. 读书记录(持续更新...)