当我们需要实现三角形形式的粒子运动效果时,可以使用JavaScript来实现。下面是实现的完整攻略。
步骤一:准备工作
首先要准备好基本的HTML和CSS代码,用来在页面上展示三角形和粒子运动效果。
其中HTML需要包含一个canvas元素,用来在页面上绘制三角形和粒子,代码如下:
<canvas id="canvas"></canvas>
CSS代码用来定义canvas元素的宽度和高度,代码如下:
#canvas{
width: 100%;
height: 100%;
}
步骤二:绘制三角形
接下来要通过JavaScript代码来绘制一个等边三角形,并在canvas上显示出来。
var c = document.getElementById("canvas");
var ctx = c.getContext("2d");
ctx.beginPath();
ctx.moveTo(50, 50);
ctx.lineTo(100, 100);
ctx.lineTo(0, 100);
ctx.fillStyle = "red";
ctx.fill();
以上代码会在canvas上绘制一个红色的等边三角形,三角形的三个顶点坐标分别为(50, 50)、(100, 100)、(0, 100)。
步骤三:绘制粒子
接下来要通过JavaScript代码来实现粒子运动效果。具体实现方法是在页面中生成一定数量的粒子,并让它们沿着三角形的边缘滑动。
下面是绘制粒子的代码:
var particleCount = 50; // 设置粒子数量
var particles = [];
for (var i = 0; i < particleCount; i++) {
particles.push({
x: getRandomInt(0, c.width),
y: getRandomInt(0, c.height),
speed: 0.5,
angle: getRandomInt(0, 360),
radius: getRandomInt(2, 4)
});
}
function getRandomInt(min, max) {
return Math.floor(Math.random() * (max - min + 1)) + min;
}
function drawParticles() {
for (var i = 0; i < particles.length; i++) {
var p = particles[i];
ctx.beginPath();
ctx.arc(p.x, p.y, p.radius, 0, Math.PI * 2, true);
ctx.closePath();
ctx.fill();
}
}
function updateParticles() {
for (var i = 0; i < particles.length; i++) {
var p = particles[i];
var vx = Math.cos(p.angle) * p.speed;
var vy = Math.sin(p.angle) * p.speed;
p.x += vx;
p.y += vy;
if (p.x < 0 || p.x > c.width || p.y < 0 || p.y > c.height) {
p.x = getRandomInt(0, c.width);
p.y = getRandomInt(0, c.height);
p.angle = getRandomInt(0, 360);
}
}
}
function loop() {
ctx.clearRect(0, 0, c.width, c.height);
drawParticles();
updateParticles();
requestAnimationFrame(loop);
}
loop();
以上代码中,通过定义一个数组来储存粒子的坐标、速度、角度和半径等信息。并通过循环遍历数组中的每个粒子,让它们沿着三角形的边缘移动。
示例一
下面是一条示例说明,演示了绘制一个蓝色等边三角形,并在三角形边缘绘制20个随机颜色的粒子,这些粒子会沿着三角形的边缘滑动,代码如下:
<!DOCTYPE html>
<html>
<head>
<title>Example 1</title>
<style>
#canvas {
width: 100vw;
height: 100vh;
background: #f2f2f2;
}
</style>
</head>
<body>
<canvas id="canvas"></canvas>
<script>
var c = document.getElementById("canvas");
var ctx = c.getContext("2d");
var particleCount = 20; // 设置粒子数量
var particles = [];
// 绘制三角形
ctx.beginPath();
ctx.moveTo(50, 50);
ctx.lineTo(100, 100);
ctx.lineTo(0, 100);
ctx.fillStyle = "blue";
ctx.fill();
// 生成粒子
for (var i = 0; i < particleCount; i++) {
particles.push({
x: getRandomInt(0, c.width),
y: getRandomInt(0, c.height),
speed: 0.5,
angle: getRandomInt(0, 360),
radius: getRandomInt(2, 4),
color: getRandomColor()
});
}
function getRandomInt(min, max) {
return Math.floor(Math.random() * (max - min + 1)) + min;
}
function getRandomColor() {
return (
"rgb(" +
getRandomInt(0, 255) +
"," +
getRandomInt(0, 255) +
"," +
getRandomInt(0, 255) +
")"
);
}
function drawParticles() {
for (var i = 0; i < particles.length; i++) {
var p = particles[i];
ctx.beginPath();
ctx.arc(p.x, p.y, p.radius, 0, Math.PI * 2, true);
ctx.closePath();
ctx.fillStyle = p.color;
ctx.fill();
}
}
function updateParticles() {
for (var i = 0; i < particles.length; i++) {
var p = particles[i];
var vx = Math.cos(p.angle) * p.speed;
var vy = Math.sin(p.angle) * p.speed;
p.x += vx;
p.y += vy;
if (
p.x < 50 ||
p.x > 100 ||
p.y < 50 ||
p.y > 100 - ((p.x - 50) * Math.sqrt(3)) / 2
) {
p.x = getRandomInt(0, c.width);
p.y = getRandomInt(0, c.height);
p.angle = getRandomInt(0, 360);
}
}
}
function loop() {
ctx.clearRect(0, 0, c.width, c.height);
drawParticles();
updateParticles();
requestAnimationFrame(loop);
}
loop();
</script>
</body>
</html>
示例二
接下来是第二条示例说明,演示了如何通过更改粒子的速度、颜色等属性,来实现不同的效果。将颜色从随机变成红色,增加速度,同时增加粒子数量。
<!DOCTYPE html>
<html>
<head>
<title>Example 2</title>
<style>
#canvas {
width: 100vw;
height: 100vh;
background: #f2f2f2;
}
</style>
</head>
<body>
<canvas id="canvas"></canvas>
<script>
var c = document.getElementById("canvas");
var ctx = c.getContext("2d");
var particleCount = 50; // 设置粒子数量
var particles = [];
// 绘制三角形
ctx.beginPath();
ctx.moveTo(50, 50);
ctx.lineTo(100, 100);
ctx.lineTo(0, 100);
ctx.fillStyle = "red";
ctx.fill();
// 生成粒子
for (var i = 0; i < particleCount; i++) {
particles.push({
x: getRandomInt(0, c.width),
y: getRandomInt(0, c.height),
speed: 2, // 增加粒子速度
angle: getRandomInt(0, 360),
radius: getRandomInt(2, 4),
color: "red" // 将颜色定为红色
});
}
function getRandomInt(min, max) {
return Math.floor(Math.random() * (max - min + 1)) + min;
}
function drawParticles() {
for (var i = 0; i < particles.length; i++) {
var p = particles[i];
ctx.beginPath();
ctx.arc(p.x, p.y, p.radius, 0, Math.PI * 2, true);
ctx.closePath();
ctx.fillStyle = p.color;
ctx.fill();
}
}
function updateParticles() {
for (var i = 0; i < particles.length; i++) {
var p = particles[i];
var vx = Math.cos(p.angle) * p.speed;
var vy = Math.sin(p.angle) * p.speed;
p.x += vx;
p.y += vy;
if (
p.x < 50 ||
p.x > 100 ||
p.y < 50 ||
p.y > 100 - ((p.x - 50) * Math.sqrt(3)) / 2
) {
p.x = getRandomInt(0, c.width);
p.y = getRandomInt(0, c.height);
p.angle = getRandomInt(0, 360);
}
}
}
function loop() {
ctx.clearRect(0, 0, c.width, c.height);
drawParticles();
updateParticles();
requestAnimationFrame(loop);
}
loop();
</script>
</body>
</html>
以上两个示例演示了如何通过JavaScript来实现三角形粒子运动效果,可以根据需求自行调整粒子数量、运动速度、颜色等属性,来实现不同的效果。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:js实现三角形粒子运动 - Python技术站