JS特效第132弹:canvas圆点分散光标跟随动画特效代码

        基于canvas制作跟随鼠标移动的彩色圆点粒子分散动画特效 ,先来看看效果:

        一部分关键的代码如下:

<!DOCTYPE html>
<html lang="en">

<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title></title>

<style>
* {
	margin: 0;
	padding: 0;
}

body {
	overflow: hidden;
}

canvas {
	background-color: black;
	transition: all .2s;
}
</style>

</head>

<body>

<canvas id="canvas"></canvas>
<script circleWidth='10' id="cvs">
 /** @type {HTMLCanvasElement} */
// 初始化画板
const canvas = document.querySelector('#canvas');
canvas.width = window.innerWidth;
canvas.height = window.innerHeight;

// 初始化画笔
const cvs = canvas.getContext('2d');
let CircleArr = [];

// 实例化对象

canvas.addEventListener('mousemove', function (ev) {
   let cir = new Circle(ev.pageX, ev.pageY);
   CircleArr.push(cir);
})

canvas.addEventListener('touchmove', function (ev) {
   let cir = new Circle(ev.touches[0].clientX, ev.touches[0].clientY);
   CircleArr.push(cir);
})

/**
* 主要参数位置
*/
function Circle(X, Y) {
   this.X = Math.floor(X);
   this.Y = Math.floor(Y);
   this.speedX = Math.floor((Math.random() - 0.5) * 4);
   this.speedY = Math.floor((Math.random() - 0.5) * 4);
   this.A = 1;
   this.R = +document.getElementById('cvs').getAttribute('circleWidth') || 20;

}

Circle.prototype = {
   // 画圆
   draw() {
	   cvs.beginPath();
	   cvs.fillStyle =
		   `rgb(${Math.floor(Math.random()*255)},${Math.floor(Math.random()*255)},${Math.floor(Math.random()*255)})`;
	   cvs.globalCompositeOperation = "lighter";
	   cvs.globalAlpha = this.A;
	   cvs.arc(this.X, this.Y, this.R, 0, Math.PI * 2);
	   cvs.fill();
	   this.upDate();
   },
   // 更新圆的状态
   upDate() {
	   this.X += this.speedX;
	   this.Y += this.speedY;
	   this.A *= 0.98;
   }
}

// 清除重画
function render() {
   cvs.clearRect(0, 0, canvas.width, canvas.height);
   CircleArr.forEach(function (ele, i) {
	   ele.draw();
	   // 删除已经执行完的圆优化性能
	   if (ele.A < 0.03) {
		   CircleArr.splice(i, 1)
	   }
   });
   //关键帧的刷新
   requestAnimationFrame(render);
}
render()
</script>
	
</body>

</html>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值