首页 > 其他分享 >js 粒子点击鼠标(particle)

js 粒子点击鼠标(particle)

时间:2023-01-23 10:11:31浏览次数:52  
标签:canvas const 鼠标 particle ctx js particles mouse

直接贴js代码在script里面就行了

const particle_canvas = document.createElement("canvas");
particle_canvas.setAttribute("id","particle_canvas")
document.querySelector("body").appendChild(particle_canvas)

const ctx = particle_canvas.getContext('2d');
particle_canvas.width = window.innerWidth;
particle_canvas.height = window.innerHeight;
let particles = [];

window.addEventListener('resize', function(e) {
	particle_canvas.width = window.innerWidth;
	particle_canvas.height = window.innerHeight;
});

let hueCol = 0;

const mouse = {
	x: undefined,
	y: undefined,
}

particle_canvas.addEventListener('click', function(e) {
	mouse.x = e.x;
	mouse.y = e.y;
	for (let i = 0; i < 5; i++) {
		particles.push(new Particle);
	}
})

/// 注释掉鼠标移动效果
// particle_canvas.addEventListener('mousemove', function(e) {
// 	mouse.x = e.x;
// 	mouse.y = e.y;
// 	for (let i = 0; i < 5; i++) {
// 		particles.push(new Particle);
// 	}
// })

class Particle {
	constructor() {
		this.x = mouse.x;
		this.y = mouse.y;
		this.speedX = Math.random() * 3 - 1.5;
		this.speedY = Math.random() * 3 - 1.5;
		this.color = 'hsl(' + hueCol + ', 100%, 50%)';
		this.size = Math.random() * 5 + 1;
	}
	update() {
		this.x += this.speedX;
		this.y += this.speedY;
		this.size -= 0.1;
	}
	draw() {
		ctx.fillStyle = this.color;
		ctx.beginPath();
		ctx.arc(this.x, this.y, 5, 0, Math.PI * 2);
		ctx.fill();
	}
}

function handleParticles() {
	for (var i = 0; i < particles.length; i++) {
		particles[i].update();
		particles[i].draw();
		for (var j = i + 1; j < particles.length; j++) {
			const dx = particles[j].x - particles[i].x;
			const dy = particles[j].y - particles[i].y;
			const distance = dx * dx + dy * dy;
			if (distance < 10000) {
				ctx.beginPath();
				ctx.strokeStyle = particles[i].color;
				ctx.lineWidth = 0.3;
				ctx.moveTo(particles[i].x, particles[i].y);
				ctx.lineTo(particles[j].x, particles[j].y);
				ctx.stroke();
			}
		}
		if (particles.size < 0.3) {
			particles.splice(i, 1);
			i--;
		}
	}
}

function animate() {
	ctx.clearRect(0, 0, particle_canvas.width, particle_canvas.height);
	handleParticles();
	hueCol += 2;
	requestAnimationFrame(animate);
}

animate();

标签:canvas,const,鼠标,particle,ctx,js,particles,mouse
From: https://www.cnblogs.com/sqmw/p/17065020.html

相关文章

  • Three.js 进阶之旅:新春特典-Rabbit craft go
    声明:本文涉及图文和模型素材仅用于个人学习、研究和欣赏,请勿二次修改、非法传播、转载、出版、商用、及进行其他获利行为。摘要兔年到了,祝大家身体健,康万事顺利。本文内......
  • js浏览器录制屏幕
    <!DOCTYPEhtml><html><head><metacharset="utf-8"></head><body><buttontype="button"onclick="recordScreen()">Start</button><buttontype="bu......
  • js dom节点的属性不能访问
    有些时候,我们会发现DOM节点的某个属性通过dom.XXX不能访问实际上,DOM也是一个对象,当我们通过控制台打印出来后,会发现这个属性并不在DOM节点上面,我们需要先setAttribute,之后......
  • js 操作视频帧
    MDNhttps://developer.mozilla.org/zh-CN/docs/Web/API/Canvas_API/Manipulating_video_using_canvasfunctiongetVideoBase64(url){ returnnewPromise(function(res......
  • sql base nodejs py go操作基本的db
    constmysql=require('mysql2');constconnection=mysql.createConnection({host:'localhost',user:'root',password:'root',database:'mybatis_pl......
  • JS_11_操作form对象
    通过操作form对象,咱可以动态进行数据提交。  一、form对象获取form对象://使用id值获取form对象varfrm=document.getElementById('frm_id');//使用name值获......
  • js 插入节点
    apendChildelement.appendChild(aChild)如果sp2没有下一个节点,则它肯定是最后一个节点,则sp2.nextSibling返回null,且sp1被插入到子节点列表的最后面(即sp2后面)。......
  • javascript: node.js
     consthttp=require("http");http.createServer(function(request,response){response.writeHead(200,{'Content-type':'text/html'});response.end('<h1>......
  • 学习笔记——SpringMVC消息转换器概述;使用消息转换器处理请求报文;使用消息转换器处理
    2023-01-20一、SpringMVC消息转换器概述1、HttpMessageConverter<T>消息转换器作用:(1)将java对象与请求报文及响应报文进行相互转化(2)使用HttpMessageConverter<T>将请......
  • vimtualbox 安装虚拟机之后屏幕过小、鼠标不同自由在虚拟机和物理主机之间切换的解决
     001、  002、  003、点击run  004、表示完成,按回车  005、  006、reboot进行重启 007、  008、 ......