js实现流星划过
实现流星划过效果的方法
使用JavaScript结合CSS可以实现流星划过夜空的动画效果。以下是具体实现步骤:
HTML结构
创建一个基本的HTML结构,包含一个容纳流星的容器:

<div id="sky"></div>
CSS样式
为流星和夜空添加基本样式:
#sky {
position: relative;
width: 100%;
height: 100vh;
background: #000;
overflow: hidden;
}
.meteor {
position: absolute;
width: 2px;
height: 2px;
background: #fff;
border-radius: 50%;
box-shadow: 0 0 10px 3px rgba(255, 255, 255, 0.8);
}
JavaScript实现
通过JavaScript动态创建流星并设置动画:

function createMeteor() {
const sky = document.getElementById('sky');
const meteor = document.createElement('div');
meteor.className = 'meteor';
// 随机位置
const startX = Math.random() * window.innerWidth;
const startY = -10;
// 随机大小
const size = Math.random() * 3 + 1;
meteor.style.width = `${size}px`;
meteor.style.height = `${size}px`;
// 随机透明度
const opacity = Math.random() * 0.8 + 0.2;
meteor.style.opacity = opacity;
// 随机颜色(可选)
const hue = Math.random() * 60 + 180; // 蓝白色调
meteor.style.background = `hsl(${hue}, 100%, 80%)`;
meteor.style.boxShadow = `0 0 ${size*3}px ${size}px hsla(${hue}, 100%, 80%, 0.5)`;
// 设置初始位置
meteor.style.left = `${startX}px`;
meteor.style.top = `${startY}px`;
sky.appendChild(meteor);
// 动画参数
const duration = Math.random() * 2000 + 1000;
const angle = Math.random() * 30 + 60; // 60-90度角
const distance = Math.random() * 300 + 200;
// 动画
const animate = () => {
const progress = performance.now() % duration / duration;
if (progress >= 1) {
sky.removeChild(meteor);
return;
}
const x = startX + Math.sin(angle * Math.PI/180) * distance * progress;
const y = startY + Math.cos(angle * Math.PI/180) * distance * progress;
meteor.style.left = `${x}px`;
meteor.style.top = `${y}px`;
meteor.style.opacity = opacity * (1 - progress);
requestAnimationFrame(animate);
};
requestAnimationFrame(animate);
}
// 定期创建流星
setInterval(createMeteor, 500);
增强效果
可以添加尾迹效果使流星更逼真:
.meteor::after {
content: '';
position: absolute;
top: 0;
left: 0;
width: 100px;
height: 1px;
background: linear-gradient(90deg, rgba(255,255,255,0.8), transparent);
transform-origin: left center;
}
性能优化
对于大量流星,可以使用canvas实现更高效的渲染:
const canvas = document.createElement('canvas');
document.body.appendChild(canvas);
const ctx = canvas.getContext('2d');
function resizeCanvas() {
canvas.width = window.innerWidth;
canvas.height = window.innerHeight;
}
// 实现canvas版本的流星动画...
以上代码实现了随机位置、大小、角度和持续时间的流星效果,通过调整参数可以改变流星出现的频率和外观。






