canvas星空背景

 单星空显示:

<!DOCTYPE html>  
<html lang="en">  
<head>  
<meta charset="UTF-8">  
<meta name="viewport" content="width=device-width, initial-scale=1.0">  
<title>Starry Sky</title>  
<style>  
  body, html {  
    margin: 0;  
    padding: 0;  
    width: 100%;  
    height: 100%;  
    overflow: hidden;  
  }  
  canvas {  
    display: block;  
    background: #000;  
  }  
</style>  
</head>  
<body>  
<canvas id="starCanvas"></canvas>  
<script>
const canvas = document.getElementById('starCanvas');  
const ctx = canvas.getContext('2d');  
  
canvas.width = window.innerWidth;  
canvas.height = window.innerHeight;  
  
class Star {  
  constructor(x, y, size, speed) {  
    this.x = x;  
    this.y = y;  
    this.size = size;  
    this.speed = speed; // 注意:这里的speed现在是像素/秒,用于控制星星横向移动的速度  
  }  
  
  draw() {  
    ctx.beginPath();  
    ctx.arc(this.x, this.y, this.size, 0, Math.PI * 2, false);  
    ctx.fillStyle = 'white';  
    ctx.fill();  
    ctx.closePath();  
  }  
  
  move() {  
    this.x += this.speed; // 更新x坐标以向右移动  
    if (this.x > canvas.width + this.size) { // 当星星完全移出右侧时  
      this.x = -this.size; // 从左侧重新开始  
    }  
  }  
}
  
const stars = [];  
  
function createStars(count) {  
  for (let i = 0; i < count; i++) {  
    const size = Math.random() * 3 + 1; // 星星大小在1到4之间  
    const speed = Math.random() * 2 + 0.5; // 星星速度在0.5到2.5之间  
    const x = Math.random() * canvas.width;  
    const y = Math.random() * canvas.height;  
    stars.push(new Star(x, y, size, speed));  
  }  
}  
  
function animate() {  
  ctx.clearRect(0, 0, canvas.width, canvas.height);  
  stars.forEach(star => {  
    star.draw();  
    star.move();  
  });  
  requestAnimationFrame(animate);  
}  
  
createStars(500); // 创建500颗星星  
animate();  
  
// 监听窗口大小变化,重新设置canvas大小并重新创建星星  
window.addEventListener('resize', () => {  
  canvas.width = window.innerWidth;  
  canvas.height = window.innerHeight;  
  stars.length = 0; // 清空旧星星  
  createStars(500); // 重新创建星星  
});</script>  
</body>  
</html>

效果预览:(是横向移动的)

作为页面背景显示: 

<!DOCTYPE html>
<html lang="en" class="no-js">
<head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <title>Solid Template</title>
    <link href="https://fonts.googleapis.com/css?family=IBM+Plex+Sans:400,600" rel="stylesheet">
    <link rel="stylesheet" href="dist/css/style.css">
	<script src="https://unpkg.com/animejs@3.0.1/lib/anime.min.js"></script>
    <script src="https://unpkg.com/scrollreveal@4.0.0/dist/scrollreveal.min.js"></script>
</head>

<style>  
    body, html {  
      margin: 0;  
      padding: 0;  
      width: 100%;  
      height: 100%;  
      /* overflow: hidden;   */
    }  
    canvas {  
        display: block;
        position: fixed;
        top: 0;
        left: 0;
        width: 100%;
        height: 100%;
        /* z-index: -1; 确保 canvas 在背景 */
    }  
  </style>  

  <body class="is-boxed has-animations">
    
    <canvas id="starCanvas"></canvas>  
    <script>
        const canvas = document.getElementById('starCanvas');  
        const ctx = canvas.getContext('2d');  
          
        canvas.width = window.innerWidth;  
        canvas.height = window.innerHeight;  
          
        class Star {  
          constructor(x, y, size, speed) {  
            this.x = x;  
            this.y = y;  
            this.size = size;  
            this.speed = speed; // 注意:这里的speed现在是像素/秒,用于控制星星横向移动的速度  
          }  
          
          draw() {  
            ctx.beginPath();  
            ctx.arc(this.x, this.y, this.size, 0, Math.PI * 2, false);  
            ctx.fillStyle = 'white';  
            ctx.fill();  
            ctx.closePath();  
          }  
          
          move() {  
            this.x += this.speed; // 更新x坐标以向右移动  
            if (this.x > canvas.width + this.size) { // 当星星完全移出右侧时  
              this.x = -this.size; // 从左侧重新开始  
            }  
          }  
        }
          
        const stars = [];  
          
        function createStars(count) {  
          for (let i = 0; i < count; i++) {  
            const size = Math.random() * 3 + 1; // 星星大小在1到4之间  
            const speed = Math.random() * 2 + 0.5; // 星星速度在0.5到2.5之间  
            const x = Math.random() * canvas.width;  
            const y = Math.random() * canvas.height;  
            stars.push(new Star(x, y, size, speed));  
          }  
        }  
          
        function animate() {  
          ctx.clearRect(0, 0, canvas.width, canvas.height);  
          stars.forEach(star => {  
            star.draw();  
            star.move();  
          });  
          requestAnimationFrame(animate);  
        }  
          
        createStars(500); // 创建500颗星星  
        animate();  
          
        // 监听窗口大小变化,重新设置canvas大小并重新创建星星  
        window.addEventListener('resize', () => {  
          canvas.width = window.innerWidth;  
          canvas.height = window.innerHeight;  
          stars.length = 0; // 清空旧星星  
          createStars(500); // 重新创建星星  
        });
    </script>  

    <div class="main">
        页面内容
    </div>
  </body>
</html>

 效果预览:RosyHickey Home

  • 5
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Canvas星空特效是一种通过使用HTML5的canvas元素和JavaScript来实现的动态视觉效果。它可以模拟出夜空中闪烁的星星和流动的星云,为网页增添了一种神秘和浪漫的氛围。 要实现星空特效,首先需要借助canvas元素创建一个画布。接下来,通过设置画布的背景颜色为黑色,可以模拟出夜空的效果。然后,在画布上画出多个小圆,代表星星,通过调整星星的位置、大小和颜色,可以创造出星空中繁星闪烁的效果。 为了使星星的闪烁更加自然,可以通过使用JavaScript控制星星的透明度,实现星星的渐隐渐显效果。还可以使用随机数来控制星星的闪烁速度和亮度,使每个星星都有不同的闪烁效果。 除了星星,星空特效还可以添加星云的效果。通过在画布上使用渐变色填充一个大圆,可以模拟出星云的形状。可以调整星云的透明度和颜色,使其与星星相互交织,形成更加丰富的视觉效果。 在实际应用中,我们可以将这种星空特效应用于个人网站背景,或者是某个特定的网页中,为用户带来更好的视觉体验。除此之外,还可以使用一些其他的特效技巧,如添加动画效果,让星星和星云在画布上流动,使整个星空呈现出更加生动的效果。 总而言之,Canvas星空特效通过使用canvas元素和JavaScript,可以实现一个模拟夜空的动态视觉效果,为网页增添一种神秘和浪漫的氛围。它可以用于个人网站背景或特定的网页中,为用户带来更好的视觉体验。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值