当前位置:首页 > JavaScript

js实现星星闪烁的效果

2026-03-02 00:16:41JavaScript

使用CSS动画实现星星闪烁

通过CSS的@keyframesanimation属性可以轻松实现星星闪烁效果。定义一个透明度变化的动画,并将其应用到星星元素上。

.star {
  width: 20px;
  height: 20px;
  background-color: gold;
  border-radius: 50%;
  animation: twinkle 1s infinite alternate;
}

@keyframes twinkle {
  from { opacity: 0.3; }
  to { opacity: 1; }
}

使用JavaScript动态控制闪烁

通过setIntervalrequestAnimationFrame动态修改星星的样式属性,实现更灵活的闪烁效果。

const star = document.querySelector('.star');
let opacity = 0.3;
let increasing = true;

function animateStar() {
  if (increasing) {
    opacity += 0.05;
    if (opacity >= 1) increasing = false;
  } else {
    opacity -= 0.05;
    if (opacity <= 0.3) increasing = true;
  }
  star.style.opacity = opacity;
  requestAnimationFrame(animateStar);
}

animateStar();

创建多个随机闪烁的星星

在页面上生成多个星星,并为每个星星设置不同的闪烁频率和延迟。

const container = document.getElementById('stars-container');
const starCount = 20;

for (let i = 0; i < starCount; i++) {
  const star = document.createElement('div');
  star.className = 'star';
  star.style.left = `${Math.random() * 100}%`;
  star.style.top = `${Math.random() * 100}%`;
  star.style.animationDuration = `${0.5 + Math.random() * 1.5}s`;
  star.style.animationDelay = `${Math.random() * 2}s`;
  container.appendChild(star);
}

使用Canvas绘制闪烁星星

通过Canvas API绘制更复杂的星星形状,并实现闪烁效果。

const canvas = document.getElementById('star-canvas');
const ctx = canvas.getContext('2d');
let brightness = 0.3;
let increasing = true;

function drawStar(x, y, size, brightness) {
  ctx.save();
  ctx.translate(x, y);
  ctx.beginPath();
  for (let i = 0; i < 5; i++) {
    ctx.lineTo(0, size);
    ctx.translate(0, size);
    ctx.rotate((Math.PI * 2) / 10);
    ctx.lineTo(0, -size * 0.5);
    ctx.translate(0, -size * 0.5);
    ctx.rotate((Math.PI * 2) / 10);
  }
  ctx.fillStyle = `rgba(255, 215, 0, ${brightness})`;
  ctx.fill();
  ctx.restore();
}

function animate() {
  ctx.clearRect(0, 0, canvas.width, canvas.height);

  if (increasing) {
    brightness += 0.01;
    if (brightness >= 1) increasing = false;
  } else {
    brightness -= 0.01;
    if (brightness <= 0.3) increasing = true;
  }

  drawStar(100, 100, 15, brightness);
  requestAnimationFrame(animate);
}

animate();

使用GSAP库实现高级动画

GreenSock Animation Platform (GSAP) 提供了更强大的动画控制能力。

js实现星星闪烁的效果

const stars = document.querySelectorAll('.star');
stars.forEach(star => {
  gsap.to(star, {
    opacity: 0.3,
    duration: 1 + Math.random(),
    repeat: -1,
    yoyo: true,
    ease: "power1.inOut"
  });
});

以上方法提供了从简单到复杂的多种实现方式,可以根据项目需求选择最适合的方案。CSS动画适合简单场景,JavaScript控制提供更多灵活性,Canvas适合自定义图形,而GSAP则适合复杂的动画序列。

标签: 星星效果
分享给朋友:

相关文章

vue实现基金效果

vue实现基金效果

Vue 实现基金效果 在 Vue 中实现基金效果,通常指的是模拟基金的增长、波动或可视化展示。以下是几种常见的实现方式: 数据绑定与动态更新 通过 Vue 的数据绑定特性,可以动态展示基金净值的变化…

vue实现凤凰效果

vue实现凤凰效果

Vue 实现凤凰效果 凤凰效果通常指一种视觉动画,模拟凤凰展翅、火焰燃烧等动态效果。在 Vue 中实现这种效果,可以结合 CSS 动画、Canvas 或第三方动画库(如 GSAP)。以下是几种实现方式…

vue实现开关效果

vue实现开关效果

使用Vue实现开关效果 使用v-model绑定数据 通过v-model绑定一个布尔值来控制开关状态。当用户点击开关时,布尔值会自动更新。 <template> <div cla…

vue实现滑动效果

vue实现滑动效果

Vue 实现滑动效果的方法 在 Vue 中实现滑动效果可以通过多种方式,包括使用 CSS 过渡、第三方动画库或直接操作 DOM。以下是几种常见的方法: 使用 CSS 过渡和 Vue 的 <tr…

vue 实现toogle效果

vue 实现toogle效果

使用 v-if 和 v-else 实现切换 通过 Vue 的指令 v-if 和 v-else 可以轻松实现元素的显示与隐藏切换。 <template> <button @c…

vue实现的效果

vue实现的效果

Vue.js 是一个流行的前端框架,用于构建用户界面和单页应用。以下是一些常见的 Vue 实现效果及其实现方式: 动态数据绑定 Vue 的核心特性之一是响应式数据绑定。通过将数据与 DOM 元素绑定…