当前位置:首页 > 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动态修改星星的样式属性,实现更灵活的闪烁效果。

js实现星星闪烁的效果

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();

创建多个随机闪烁的星星

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

js实现星星闪烁的效果

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) 提供了更强大的动画控制能力。

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 Router、动态组件或第三方UI库。以下是几种常见的方法: 使用Vue Router实现布局框架 Vue Ro…

vue实现吸附效果

vue实现吸附效果

实现吸附效果的基本思路 吸附效果通常指当页面滚动到某个位置时,元素固定在视口的特定位置。Vue中可以通过监听滚动事件结合CSS的position: sticky或动态样式切换实现。 使用CSS的p…

uniapp 卡片效果

uniapp 卡片效果

uniapp 实现卡片效果的方法 使用 view 和 CSS 样式 通过 view 组件结合 CSS 样式可以快速实现卡片效果。设置圆角、阴影和边距来增强视觉层次感。 <view cl…

vue实现滚动效果

vue实现滚动效果

Vue 实现滚动效果的方法 使用原生滚动方法 通过 Vue 的 ref 获取 DOM 元素,调用原生 scrollTo 或 scrollIntoView 方法实现滚动。 <template&g…

vue实现凤凰效果

vue实现凤凰效果

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

vue实现翻书效果

vue实现翻书效果

Vue实现翻书效果的方法 翻书效果可以通过CSS动画和Vue的动态绑定实现,以下是几种常见的实现方式: 使用CSS transform和transition 通过CSS的transform属性实现…