流星加载动画(Meteor Loader 星空流星划过)

CSSJS 许可:自研原创

深空星空下的流星加载动画,JS 随机生成繁星与流星,流星带白色光晕斜向划过夜空,支持 1-6 颗流星数量、调速与暂停,适合游戏、太空主题与科技感页面的加载等待。

效果演示(真实可交互)

深蓝星空底上,46 颗星星随机分布并缓慢闪烁,2-6 颗流星以不同的速度与延迟斜向划过,每颗流星带白色头部光晕与渐变尾迹。流星数量与速度均可实时调节。

正在穿梭宇宙…

流星数量 3
速度 1.0×

完整代码

HTML 结构:

<div class="ml-stage">
  <!-- 星星与流星均由 JS 动态生成 -->
</div>

CSS 核心:

/* 流星:一条渐变光带,头部用伪元素画光晕 */
.ml-meteor {
  position: absolute; width: 120px; height: 2px; border-radius: 2px;
  background: linear-gradient(90deg, rgba(255,255,255,.95),
              rgba(150,190,255,.4) 55%, transparent);
  transform: rotate(-35deg); opacity: 0;
  animation: ml-fly 2.2s ease-in infinite;
}
.ml-meteor::before {
  content: ''; position: absolute; right: -1px; top: 50%;
  width: 6px; height: 6px; margin-top: -3px; border-radius: 50%;
  background: #fff; box-shadow: 0 0 12px 3px rgba(160,200,255,.9);
}
@keyframes ml-fly {
  0%   { transform: translate3d(-60px,-30px,0) rotate(-35deg) scale(.7); opacity: 0; }
  6%   { opacity: 1; }
  22%  { transform: translate3d(420px,240px,0) rotate(-35deg) scale(1); opacity: 1; }
  30%, 100% { transform: translate3d(560px,320px,0) rotate(-35deg); opacity: 0; }
}

/* 星星闪烁 */
.ml-star { position: absolute; border-radius: 50%; background: #fff;
           animation: ml-twinkle 2.6s ease-in-out infinite; }
@keyframes ml-twinkle { 0%, 100% { opacity: .25; } 50% { opacity: .9; } }

JS 核心(随机生成流星):

for (let i = 0; i < count; i++) {
  const m = document.createElement('span');
  m.className = 'ml-meteor';
  m.style.cssText = [
    `top:${rand(4, 50)}%`,                    // 起点纵向位置
    `left:${rand(-10, 45)}%`,                 // 起点横向位置
    `animation-duration:${(dur * rand(0.8, 1.3)).toFixed(2)}s`,
    `animation-delay:${rand(0, 3).toFixed(2)}s`
  ].join(';');
  stage.appendChild(m);
}

参数说明

参数位置说明
流星数量JS count1-6 颗;越多夜空越繁忙,超过 6 颗显杂乱
单颗时长animation-duration基准 2.2s / speed 乘 0.8-1.3 随机抖动
出发位置top / left集中在左上区域,保证轨迹覆盖整个画面
轨迹距离ml-fly 的 translate3d与容器尺寸相关,改容器记得同步调整
尾迹长度width: 120px越长越飘逸,注意头部光晕位置跟随
星星数量JS 循环次数40-60 颗密度合适,过多闪烁噪音大

兼容性与性能

常见问题

Q: 流星轨迹只有一小段就消失了? 流星是固定长度的渐变光带,靠 translate3d 快速位移产生”划过”视觉;如果容器较小,把 ml-fly 里的位移距离改小(如 260px/160px)即可让轨迹完整可见。

Q: 想让流星从不同角度飞过? 每颗流星用行内样式覆盖 --ml-angle(旋转角度),keyframes 里改为 rotate(var(--ml-angle)),就能实现多角度交叉的流星雨。

Q: 星星太多导致画面闪烁刺眼? 把 ml-twinkle 的透明度范围从 .25/.9 收窄到 .4/.8,或把动画时长加大到 4s,闪烁会柔和很多。

Q: 页面有深色主题时还能用吗? 本组件本身就是深空背景,直接嵌入深色页面无违和;放在浅色页面时建议包一层圆角容器并加边框,避免突兀。

许可与来源

  • 许可证:自研原创 —— 粤喵自研原创,可免费用于个人与商业项目,无需署名。查看来源公示与许可清单
  • 来源:粤喵团队原创自研(从效果思路到代码实现均为独立完成,未直接复制第三方代码)
  • 首次发布:2026-09-01 · 最近更新:2026-09-01
  • 修改日志:2026-09-01 首次发布;2026-09-13 补充许可证与来源标注、复制按钮说明与法务页入口
  • 纠错:联系页面 / min@cactus.asia,2 个工作日内核实处理

常见问题

这个组件可以商用吗?

可以。本组件为粤喵自研原创,可免费用于个人和商业项目,无需署名。

浏览器兼容性如何?

支持所有现代浏览器(Chrome / Firefox / Safari / Edge 最新版本)。旧版 IE 不支持 CSS 动画相关特性。

怎么修改动画参数?

直接调整 CSS 中的 animation-duration(时长)、animation-timing-function(缓动曲线)等属性即可,代码中有注释说明。

✍️ 作者与审核