点击存储每个对象
绘制心的时候可以自己多试几次,我这里心画的不是很标准
完整代码
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>阁下</title>
<style>
* {
margin: 0;
padding: 0;
box-sizing: border-box;
}
body {
width: 100%;
height: 100vh;
user-select: none;
background-image: url(04.png);
background-size: 100%;
background-repeat: no-repeat;
}
canvas {
position: absolute;
left: 0;
top: 0;
z-index: -100;
}
.text{
position: absolute;
left: 50%;
top: 50%;
transform: translate(-50%,-50%);
font-size: 36px;
color: rgba(255, 255, 255, 0.5);
text-shadow: 0 0 10px rgb(255,255,255);
}
</style>
</head>
<body>
<canvas id="canvas"></canvas>
<script>
var canvas = document.getElementById("canvas");
var ctx = canvas.getContext("2d");
var kuan=0;gao=0;
window.addEventListener("resize",resizeFun)
function resizeFun(){
kuan = canvas.width = window.innerWidth;
gao = canvas.height = window.innerHeight;
}
resizeFun();
var arr = [];
window.addEventListener("click",function(e){
arr.push({
x:e.clientX,
y:e.clientY,
color:`rgba(${parseInt(Math.random() * 255)}, ${parseInt(Math.random() * 255)}, ${parseInt(Math.random() * 255)},1)`,
diaphaneity:1,//透明度默认是1
});
draw();
})
// 绘制
function draw(){
for(let i = 0;i<arr.length;i++){
ctx.beginPath();
ctx.strokeStyle = arr[i].color;
ctx.lineWidth = "1";
ctx.lineJoin = "round";
// 开始绘制
ctx.moveTo(arr[i].x,arr[i].y);
ctx.lineTo(arr[i].x - 15,arr[i].y - 15);
// 贝塞尔二次曲线
ctx.quadraticCurveTo(arr[i].x - 26, arr[i].y-32 , arr[i].x-5, arr[i].y - 30);
ctx.lineTo(arr[i].x,arr[i].y - 26);
ctx.lineTo(arr[i].x + 5, arr[i].y - 30);
ctx.quadraticCurveTo(arr[i].x + 26, arr[i].y-32 , arr[i].x + 15, arr[i].y - 15);
ctx.lineTo(arr[i].x,arr[i].y);
ctx.fillStyle = arr[i].color;
ctx.fill();
ctx.stroke();
}
}
// 更新
function update(){
for(let i = 0;i<arr.length;i++){
arr[i].y -= 1;
let old = arr[i].diaphaneity;
arr[i].diaphaneity -= 0.01;
arr[i].color = arr[i].color.replace(old+")",arr[i].diaphaneity+")");
// 当离开屏幕或透明度小于0时删掉
if(arr[i].y < 20 || arr[i].diaphaneity < 0){
arr.splice(i,1);
}
}
}
setInterval(function(){
ctx.clearRect(0,0,kuan,gao);
update();
draw();
},20)
</script>
</body>
</html>