帮我写一个js的烟花代码
时间: 2023-09-15 13:05:35 浏览: 114
### 回答1:
我可以为您提供一个简单的烟花效果的JavaScript代码:// 用于烟花效果的变量
var num_particles = 50; // 粒子数量
var t_life= 2000; // 烟花存活时间(ms)// 创建画布
var canvas = document.createElement("canvas");
var ctx = canvas.getContext("2d");// 设置画布的宽高
canvas.width = window.innerWidth;
canvas.height = window.innerHeight;// 将画布添加到body中
document.body.appendChild(canvas);// 创建一个粒子数组
var particles = [];// 定义粒子的构造函数
function Particle(){
// 初始位置
this.x = Math.random()*canvas.width;
this.y = canvas.height + Math.random()*100; // 速度
this.vx = Math.random()*5-2.5;
this.vy = Math.random()*-5 - 2; // 粒子的尺寸
this.radius = Math.random()*2+2; // 生命周期
this.life = t_life;
}// 粒子的更新方法
Particle.prototype.update = function(){
// 位置更新
this.x += this.vx;
this.y += this.vy; // 生命周期更新
this.life -= 4; // 绘制粒子
ctx.beginPath();
ctx.arc(this.x, this.y, this.radius, 0, Math.PI*2);
ctx.fillStyle = "rgba(255,255,255,"+ this.life/t_life +")";
ctx.fill();
}// 初始化粒子
for(var i=0; i<num_particles; i++){
particles.push(new Particle());
}// 绘制动画
function draw(){
// 清空画布
ctx.clearRect(0,0,canvas.width,canvas.height); // 遍历所有粒子
for(var i=0; i<num_particles; i++){
var p = particles[i];
p.update(); // 如果粒子生命小于0,则重置粒子
if(p.life < 0){
particles[i] = new Particle();
}
}
requestAnimationFrame(draw);
}draw();
### 回答2:
烟花是一种很华丽的特效,可以通过JavaScript代码实现。下面是一个简单的烟花效果代码示例:
HTML代码:
```html
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>烟花效果</title>
<style>
#firework {
position: relative;
}
.firework-dot {
position: absolute;
width: 4px;
height: 4px;
background-color: #ffc107;
border-radius: 50%;
}
.firework-trail {
position: absolute;
width: 2px;
height: 2px;
background-color: #ffc107;
border-radius: 50%;
}
</style>
</head>
<body>
<div id="firework"></div>
<script src="firework.js"></script>
</body>
</html>
```
JavaScript代码(firework.js):
```javascript
window.onload = function() {
var fireworkContainer = document.getElementById("firework");
var fireworkColors = ["#e91e63", "#2196f3", "#ffeb3b", "#03a9f4", "#ff5722"];
function createFirework(x, y) {
var firework = document.createElement("div");
firework.className = "firework-dot";
firework.style.left = x + "px";
firework.style.top = y + "px";
firework.style.backgroundColor = fireworkColors[Math.floor(Math.random() * fireworkColors.length)];
fireworkContainer.appendChild(firework);
setTimeout(function() {
fireworkContainer.removeChild(firework);
}, 1000 + Math.random() * 1000);
}
function createFireworkTrail(x, y) {
var fireworkTrail = document.createElement("div");
fireworkTrail.className = "firework-trail";
fireworkTrail.style.left = x + "px";
fireworkTrail.style.top = y + "px";
fireworkContainer.appendChild(fireworkTrail);
setTimeout(function() {
fireworkContainer.removeChild(fireworkTrail);
}, 800);
}
document.onmousemove = function(e) {
var x = e.pageX;
var y = e.pageY;
createFirework(x, y);
};
setInterval(function() {
var x = Math.random() * window.innerWidth;
var y = Math.random() * window.innerHeight;
createFireworkTrail(x, y);
}, 100);
};
```
这段代码实现了一个简单的烟花效果。通过鼠标移动或定时器触发,会在屏幕上创建烟花点和尾迹。代码通过创建div元素,并设置其样式和位置,然后添加到DOM中,一定时间后再将其从DOM中移除,从而形成动画效果。
### 回答3:
当然可以,以下是一个简单的JavaScript烟花效果的代码:
```javascript
// 创建画布
const canvas = document.createElement('canvas');
document.body.appendChild(canvas);
const ctx = canvas.getContext('2d');
canvas.width = window.innerWidth;
canvas.height = window.innerHeight;
// 创建烟花
class Fireworks {
constructor(x, y) {
this.x = x;
this.y = y;
this.color = randomColor();
this.radius = Math.random() * 2 + 1;
this.velocity = {
x: Math.random() * 6 - 3,
y: Math.random() * 3 + 1
};
this.gravity = 0.1;
}
// 更新烟花状态
update() {
this.x += this.velocity.x;
this.y += this.velocity.y;
this.velocity.y += this.gravity;
}
// 绘制烟花
draw() {
ctx.beginPath();
ctx.arc(this.x, this.y, this.radius, 0, Math.PI * 2, false);
ctx.fillStyle = this.color;
ctx.fill();
}
}
// 生成随机颜色
function randomColor() {
const colors = ['#FF6138', '#FFFF9D', '#BEEB9F', '#79BD8F', '#00A388'];
return colors[Math.floor(Math.random() * colors.length)];
}
// 创建烟花数组
let fireworks = [];
// 添加点击事件,触发烟花
document.addEventListener('click', function(event) {
const firework = new Fireworks(event.clientX, event.clientY);
fireworks.push(firework);
});
// 重绘画布
function draw() {
ctx.fillStyle = 'rgba(0, 0, 0, 0.1)';
ctx.fillRect(0, 0, canvas.width, canvas.height);
for (let i = fireworks.length - 1; i >= 0; i--) {
fireworks[i].update();
fireworks[i].draw();
// 删除已经消失的烟花
if (fireworks[i].y >= canvas.height) {
fireworks.splice(i, 1);
}
}
requestAnimationFrame(draw);
}
// 运行烟花效果
draw();
```
这段代码创建了一个画布,并在点击事件中触发烟花效果。每次点击会在点击位置生成一个烟花,随机设置烟花的速度、颜色和半径。在画布上不断更新和绘制烟花,当烟花到达画布底部时删除。画布上还有一个半透明的矩形,用于在每次绘制前清除之前的画布内容,以形成动画效果。
阅读全文