javascript Canvas动态粒子连线


Posted in Javascript onJanuary 01, 2020

好久没写博客了,最近负责了公司年会的大屏签到、滚动抽奖、节目投票,整个项目做下来有惊也有喜。期间用到了Canvas制作动画,我这边就简单做了个动态粒子连线的例子与大家分享。

一、效果图

javascript Canvas动态粒子连线

二、思路如下:

1.绘制随机区域的粒子,记录每个粒子x轴、y轴坐标以及x轴与y轴每次移动的距离

2.通过定时函数使得粒子进行移动,移动后判断是否超过界限,超过则将该粒子删除并生成一个新的粒子

3.判断所有粒子之间的距离,对给定距离的粒子进行连线。

三、代码如下:

<!DOCTYPE html>
<html>
 <head>
 <meta charset="UTF-8">
 <title>Canvas动态粒子连线</title>
 </head>
 
 <body>
 <canvas id="myCanvas" style="border: 1px solid #ddd; display: block;margin: 20px auto;"></canvas>
 <script>
 var myCanvas = document.getElementById("myCanvas");
 myCanvas.width = "800";
 myCanvas.height = "800";
 var cxt = myCanvas.getContext("2d");
 cxt.fillStyle="#ddd";
 var points =new Array();
 //绘制60个粒子
 for(var i=0;i<60;i++)
 {
 drawlizi();
 }
 setInterval(movelizi,100);
 
 //绘制静态粒子
 function drawlizi(){
 var x = generate_random(3,797);
 var y = generate_random(3,797);
 var speedx = generate_random(-4,4);
 var speedy = generate_random(-4,4);
 //防止出现不移动的粒子
 while(speedx==0&&speedy==0)
 {
 speedx = generate_random(-4,4);
 speedy = generate_random(-4,4);
 }
 var point={
 x_index:x,
 y_index:y,
 x_speed:speedx,
 y_speed:speedy
 };
 points.push(point);
 cxt.beginPath();
 cxt.arc(x,y,3,0,360);
 cxt.closePath();
 cxt.fill();
 }
 
 //粒子移动
 function movelizi(){
 cxt.clearRect(0, 0,myCanvas.width,myCanvas.height);
 for(var i=0;i<points.length;i++)
 {
 points[i].x_index = points[i].x_index+points[i].x_speed;
 points[i].y_index = points[i].y_index+points[i].y_speed;
 cxt.beginPath();
 cxt.arc(points[i].x_index,points[i].y_index,3,0,360);
 cxt.closePath();
 cxt.fill();
 //判断超过界限删除并再生
 if((points[i].x_index<3||points[i].y_index<3)||(points[i].x_index>797||points[i].y_index<3)||(points[i].x_index<3||points[i].y_index>797)||(points[i].x_index>797||points[i].y_index>797)){
 points.splice(i,1);
 drawlizi();
 }
 }
 //相近的粒子进行连线
 for (var i=0;i<points.length;i++) {
 for (var j=0;j<points.length;j++) {
 if(i!=j)
 {
 var one_x = points[i].x_index;
 var one_y = points[i].y_index;
 var two_x = points[j].x_index;
 var two_y = points[j].y_index;
 // 根据两点间的距离公式,小于界限值便进行连线
 var jl = Math.sqrt(Math.pow(one_x-two_x,2)+Math.pow(one_y-two_y,2));
 if(jl<100)
 {
 cxt.strokeStyle="#ddd";
 cxt.moveTo(one_x,one_y);
 cxt.lineTo(two_x,two_y);
 cxt.stroke();
 }
 }
 }
 }
 }
 //生成两个数之间的随机数
 function generate_random(min,max){
 return Math.floor(Math.random()*(max-min)+min);
 } 
 </script>
 </body>
 
</html>

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
JS 自动安装exe程序
Nov 30 Javascript
js 限制input只能输入数字、字母和汉字等等
Dec 18 Javascript
node.js中的fs.chmod方法使用说明
Dec 18 Javascript
javascript实现时间格式输出FormatDate函数
Jan 13 Javascript
Javascript中arguments和arguments.callee的区别浅析
Apr 24 Javascript
AngularJS中的过滤器使用详解
Jun 16 Javascript
jquery实现华丽的可折角广告代码
Sep 02 Javascript
基于原生JS实现图片裁剪
Aug 01 Javascript
Node层模拟实现multipart表单的文件上传示例
Jan 02 Javascript
webpack打包js的方法
Mar 12 Javascript
微信小程序 slot踩坑的解决
Apr 01 Javascript
微信小程序实现选项卡滑动切换
Oct 22 Javascript
小程序新版订阅消息模板消息
Dec 31 #Javascript
小程序实现长按保存图片的方法
Dec 31 #Javascript
使用webpack搭建vue环境的教程详解
Dec 31 #Javascript
Vue 实现显示/隐藏层的思路(加全局点击事件)
Dec 31 #Javascript
TypeScript之调用栈的实现
Dec 31 #Javascript
Vue通过配置WebSocket并实现群聊功能
Dec 31 #Javascript
Vue实现剪贴板复制功能
Dec 31 #Javascript
You might like
php zlib压缩和解压缩swf文件的代码
2008/12/30 PHP
PHP生成随机数的方法实例分析
2015/01/22 PHP
YII框架实现自定义第三方扩展操作示例
2019/04/26 PHP
php使用fputcsv实现大数据的导出操作详解
2020/02/27 PHP
JS去除字符串的空格增强版(可以去除中间的空格)
2009/08/26 Javascript
js 刷新页面的代码小结 推荐
2010/04/02 Javascript
js单向链表的具体实现实例
2013/06/21 Javascript
js 立即调用的函数表达式如何写
2014/01/12 Javascript
jQuery form插件之ajaxForm()和ajaxSubmit()的可选参数项对象
2016/01/23 Javascript
Javascript 实现计算器时间功能详解及实例(二)
2017/01/08 Javascript
js 输入框 正则表达式(菜鸟必看教程)
2017/02/19 Javascript
Angular.js之作用域scope'@','=','&amp;'实例详解
2017/02/28 Javascript
JavaScript中的工厂函数(推荐)
2017/03/08 Javascript
JavaScript中transform实现数字翻页效果
2017/03/08 Javascript
详解使用vue-router进行页面切换时滚动条位置与滚动监听事件
2017/03/08 Javascript
React简单介绍
2017/05/24 Javascript
Nodejs 识别图片类型的方法
2019/08/15 NodeJs
Vue 实现html中根据类型显示内容
2019/10/28 Javascript
JavaScript实现京东放大镜效果
2019/12/03 Javascript
Handtrack.js库实现实时监测手部运动(推荐)
2021/02/08 Javascript
关于Python中Inf与Nan的判断问题详解
2017/02/08 Python
Python列表list内建函数用法实例分析【insert、remove、index、pop等】
2017/07/24 Python
python机器学习之神经网络(三)
2017/12/20 Python
pycharm运行程序时在Python console窗口中运行的方法
2018/12/03 Python
python实现弹跳小球
2019/05/13 Python
Python 数据可视化pyecharts的使用详解
2019/06/26 Python
python下载卫星云图合成gif的方法示例
2020/02/18 Python
Pandas把dataframe或series转换成list的方法
2020/06/14 Python
Python Tkinter图形工具使用方法及实例解析
2020/06/15 Python
GNC健安喜美国官网:美国第一营养品牌
2016/07/22 全球购物
Hoka One One法国官网:美国专业跑鞋品牌
2018/12/29 全球购物
Perfume’s Club意大利官网:欧洲美妆电商
2019/05/03 全球购物
招商专员岗位职责
2014/02/08 职场文书
2015新学期开学寄语
2015/02/26 职场文书
分析SQL窗口函数之排名窗口函数
2022/04/21 Oracle
使用python绘制横竖条形图
2022/04/21 Python