html5 canvas星空粒子连线效果【转载】
2018/08/29 标签:
canvas星空连线
canvas粒子星空连线效果
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>离子星空</title> <style type="text/css"> * { margin: 0; padding: 0; } #myCanvas { background-color: black; } </style> </head> <body> <canvas id="myCanvas"></canvas> </body> <script type="text/javascript"> var canvas = document.getElementById("myCanvas"); canvas.width = document.documentElement.clientWidth; canvas.height = document.documentElement.clientHeight; var ctx = canvas.getContext("2d"); //创建小球的构造函数 function Ball() { this.x = randomNum(3, canvas.width - 3); this.y = randomNum(3, canvas.height - 3); this.r = randomNum(1, 3); this.color = randomColor(); this.speedX = randomNum(-3, 3) * 0.2; this.speedY = randomNum(-3, 3) * 0.2; } Ball.prototype = { //绘制小球 draw: function () { ctx.beginPath(); ctx.globalAlpha = 1; ctx.fillStyle = this.color; ctx.arc(this.x, this.y, this.r, 0, Math.PI * 2); ctx.fill(); }, //小球移动 move: function () { this.x += this.speedX; this.y += this.speedY; //为了合理性,设置极限值 if (this.x <= 3 || this.x > canvas.width - 3) { this.speedX *= -1; } if (this.y <= 3 || this.y >= canvas.height - 3) { this.speedY *= -1; } } } //存储所有的小球 var balls = []; //创建200个小球 for (var i = 0; i < 150; i++) { var ball = new Ball(); balls.push(ball); } main(); function main() { ctx.clearRect(0, 0, canvas.width, canvas.height); //鼠标移动绘制线 mouseLine(); //小球与小球之间自动画线 drawLine(); //使用关键帧动画,不断的绘制和清除 window.requestAnimationFrame(main); } //添加鼠标移动事件 //记录鼠标移动时的mouseX坐标 var mouseX; var mouseY; canvas.onmousemove = function (e) { var ev = event || e; mouseX = ev.offsetX; mouseY = ev.offsetY; } //判断是否划线 function drawLine() { for (var i = 0; i < balls.length; i++) { balls[i].draw(); balls[i].move(); for (var j = 0; j < balls.length; j++) { if (i != j) { if (Math.sqrt(Math.pow((balls[i].x - balls[j].x), 2) + Math.pow((balls[i].y - balls[j].y), 2)) < 80) { ctx.beginPath(); ctx.moveTo(balls[i].x, balls[i].y); ctx.lineTo(balls[j].x, balls[j].y); ctx.strokeStyle = "white"; ctx.globalAlpha = 0.2; ctx.stroke(); } } } } } //使用鼠标移动划线 function mouseLine() { for (var i = 0; i < balls.length; i++) { if (Math.sqrt(Math.pow((balls[i].x - mouseX), 2) + Math.pow((balls[i].y - mouseY), 2)) < 80) { ctx.beginPath(); ctx.moveTo(balls[i].x, balls[i].y); ctx.lineTo(mouseX, mouseY); ctx.strokeStyle = "white"; ctx.globalAlpha = 0.8; ctx.stroke(); } } } //随机函数 function randomNum(m, n) { return Math.floor(Math.random() * (n - m + 1) + m); } //随机颜色 function randomColor() { return "rgb(" + randomNum(0, 255) + "," + randomNum(0, 255) + "," + randomNum(0, 255) + ")"; } </script> </html>
上一篇:
velocityjs特效整理
下一篇:
大鲲网发布项目列表树抓取
静水缘首页
刘丕水+宋静静于2007年9月相识于山东理 工大学,毕业后2011年相恋,共甘苦,历 时四年,终于在11月23号拿到了红本本, 组建了自己的小家庭......文章分类
最新文章
- nodejs私钥加密公钥解密的一个例子
- uniapp和微信小程序判断程序运行在开发或者测试或者线上版本的方法分别是什么
- electron使用electron-builder打包后模块包含exe文件执行失败
- Compile is disallowed on the main thread, if the buffer size is larger than 4KB
- better-sqlite3简介及常用操作
- nodejs 操作数据库的库
- nodejs使用http-proxy库实现多个域名代理和同时代理websocket的例子,代理包含https和http两种协议
- iis配置反向代理
- javascript伪多线程代码
- ip所在地址段判断