当前位置:首页 > JavaScript

js实现星空

2026-02-01 12:56:59JavaScript

使用Canvas绘制星空效果

在JavaScript中实现星空效果可以通过HTML5的Canvas元素结合随机生成星星的坐标和大小来完成。以下是一个基础的实现方法:

const canvas = document.getElementById('starCanvas');
const ctx = canvas.getContext('2d');

// 设置canvas尺寸为窗口大小
canvas.width = window.innerWidth;
canvas.height = window.innerHeight;

// 星星数组
const stars = [];

// 初始化星星
function initStars() {
  for (let i = 0; i < 200; i++) {
    stars.push({
      x: Math.random() * canvas.width,
      y: Math.random() * canvas.height,
      radius: Math.random() * 1.5,
      speed: Math.random() * 0.2,
      alpha: Math.random()
    });
  }
}

// 绘制星星
function drawStars() {
  ctx.clearRect(0, 0, canvas.width, canvas.height);
  ctx.fillStyle = 'white';

  stars.forEach(star => {
    ctx.globalAlpha = star.alpha;
    ctx.beginPath();
    ctx.arc(star.x, star.y, star.radius, 0, Math.PI * 2);
    ctx.fill();

    // 移动星星
    star.y += star.speed;

    // 如果星星超出底部边界,重置到顶部
    if (star.y > canvas.height) {
      star.y = 0;
      star.x = Math.random() * canvas.width;
    }
  });

  requestAnimationFrame(drawStars);
}

// 窗口大小改变时重设canvas尺寸
window.addEventListener('resize', () => {
  canvas.width = window.innerWidth;
  canvas.height = window.innerHeight;
});

initStars();
drawStars();

添加闪烁效果

让星星随机闪烁可以增强真实感:

function drawStars() {
  ctx.clearRect(0, 0, canvas.width, canvas.height);
  ctx.fillStyle = 'white';

  stars.forEach(star => {
    // 随机改变透明度实现闪烁
    if (Math.random() < 0.01) {
      star.alpha = Math.random();
    }

    ctx.globalAlpha = star.alpha;
    ctx.beginPath();
    ctx.arc(star.x, star.y, star.radius, 0, Math.PI * 2);
    ctx.fill();

    star.y += star.speed;

    if (star.y > canvas.height) {
      star.y = 0;
      star.x = Math.random() * canvas.width;
    }
  });

  requestAnimationFrame(drawStars);
}

添加不同大小的星星

创建不同大小的星星可以增加视觉效果层次感:

js实现星空

function initStars() {
  for (let i = 0; i < 300; i++) {
    const radius = Math.random() * 3;
    stars.push({
      x: Math.random() * canvas.width,
      y: Math.random() * canvas.height,
      radius: radius,
      speed: radius * 0.1,  // 较大的星星移动更快
      alpha: Math.random()
    });
  }
}

完整的HTML结构

<!DOCTYPE html>
<html>
<head>
  <title>星空效果</title>
  <style>
    body {
      margin: 0;
      overflow: hidden;
      background-color: #000;
    }
    canvas {
      display: block;
    }
  </style>
</head>
<body>
  <canvas id="starCanvas"></canvas>
  <script>
    // 上面的JavaScript代码放在这里
  </script>
</body>
</html>

这个实现创建了一个基本的星空效果,包含随机分布的星星、星星移动和闪烁效果。可以通过调整星星数量、大小范围和移动速度来获得不同的视觉效果。

标签: 星空js
分享给朋友:

相关文章

js实现vue路由

js实现vue路由

Vue路由基础实现 使用Vue Router实现前端路由需要先安装并配置路由库。Vue Router是Vue.js官方的路由管理器。 安装Vue Router: npm install vue-r…

js实现全选

js实现全选

实现全选功能的方法 在JavaScript中实现全选功能通常涉及监听全选复选框的点击事件,并根据其状态控制其他复选框的选中状态。以下是几种常见的实现方式: 基础DOM操作实现 通过获取所有目标复选框…

js实现拷贝

js实现拷贝

实现文本拷贝 使用 document.execCommand 方法(已废弃但兼容性较好): function copyText(text) { const textarea = document…

js实现二叉树

js实现二叉树

二叉树的基本概念 二叉树是一种树形数据结构,每个节点最多有两个子节点,分别称为左子节点和右子节点。二叉树的常见操作包括插入、删除、遍历等。 二叉树的节点定义 在JavaScript中,二叉树的节点可…

js实现祖玛

js实现祖玛

实现祖玛游戏的核心思路 祖玛游戏的核心玩法是发射彩色珠子,形成三个或以上相同颜色的珠子即可消除。以下是使用JavaScript实现的基本框架。 游戏初始化 创建画布并初始化游戏状态: const…

链表实现js

链表实现js

链表的基本概念 链表是一种线性数据结构,由一系列节点组成,每个节点包含数据和一个指向下一个节点的指针(单向链表)或两个指针(双向链表)。与数组不同,链表在内存中非连续存储,插入和删除操作更高效,但随机…