700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > Canvas实现动态粒子连线效果(code)

Canvas实现动态粒子连线效果(code)

时间:2019-10-06 17:25:53

相关推荐

Canvas实现动态粒子连线效果(code)

web前端|js教程

Canvas,html5,javascript

web前端-js教程

本篇文章给大家通过示例来介绍一下JS+Canvas制作动画,实现动态粒子连线效果的方法

海之乐章 源码,树莓派 安装vscode,Ubuntu编译清除,tomcat开启就执行,爬虫cnnvd,php cms设计,云南长沙seo优化公司,果然新鲜水果商城网站程序源码,产品 网页 模板lzw

JS+Canvas制作动画,实现动态粒子连线效果

一元购 源码,ubuntu 玩梦幻西游,kotlin爬虫使用吗,永久php,安徽seo博客lzw

效果图如下

销售php源码,ubuntu系统公钥,全球爬虫领域分布,php遍访表单,内江网络seolzw

思路如下:

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

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

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

代码如下:

Canvas动态粒子连线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_index797||points[i].y_index<3)||(points[i].x_index797)||(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); }

更多炫酷的页面特效,可访问:js代码特效 栏目!!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。