当前位置:首页 > JavaScript

js实现红包雨怎么实现

2026-04-07 06:43:58JavaScript

实现思路

红包雨的核心逻辑包括随机生成红包位置、控制下落动画、点击交互及碰撞检测。通过动态创建DOM元素、CSS动画和事件监听实现。

基本结构

HTML部分只需一个容器用于承载红包元素:

<div id="redpacket-container"></div>

CSS基础样式:

js实现红包雨怎么实现

#redpacket-container {
  position: relative;
  width: 100vw;
  height: 100vh;
  overflow: hidden;
}

.redpacket {
  position: absolute;
  width: 60px;
  height: 80px;
  background-image: url('redpacket.png');
  background-size: contain;
  cursor: pointer;
  z-index: 10;
  animation: fall linear;
}

动画关键帧

@keyframes fall {
  to {
    transform: translateY(100vh);
  }
}

JavaScript实现

初始化参数配置:

const config = {
  duration: 3000,  // 动画持续时间(ms)
  spawnInterval: 200,  // 生成间隔(ms)
  maxCount: 50  // 最大同时存在数量
};

红包生成函数:

js实现红包雨怎么实现

function createRedPacket() {
  const packet = document.createElement('div');
  packet.className = 'redpacket';
  packet.style.left = `${Math.random() * 100}vw`;
  packet.style.animationDuration = `${config.duration}ms`;

  // 点击事件
  packet.addEventListener('click', () => {
    packet.remove();
    showReward();
  });

  document.getElementById('redpacket-container').appendChild(packet);

  // 动画结束后移除
  packet.addEventListener('animationend', () => {
    packet.remove();
  });
}

奖励展示函数:

function showReward() {
  const rewards = ['1元', '5元', '10元', '谢谢参与'];
  alert(rewards[Math.floor(Math.random() * rewards.length)]);
}

控制生成频率:

let activeCount = 0;

function startRedPacketRain() {
  const timer = setInterval(() => {
    if (activeCount < config.maxCount) {
      createRedPacket();
      activeCount++;
    }
  }, config.spawnInterval);

  // 5秒后停止
  setTimeout(() => {
    clearInterval(timer);
  }, 5000);
}

优化建议

  1. 使用requestAnimationFrame替代CSS动画实现更流畅的效果
  2. 添加碰撞检测避免红包重叠
  3. 实现红包旋转效果增强视觉体验
  4. 使用对象池管理DOM元素提升性能

完整示例可通过监听窗口加载事件启动:

window.addEventListener('load', startRedPacketRain);

标签: 红包js
分享给朋友:

相关文章

vue实现点击红包雨

vue实现点击红包雨

Vue 实现点击红包雨效果 实现红包雨效果需要结合 Vue 的响应式数据绑定和动画效果。以下是具体实现方法: 创建红包组件 定义一个红包组件,包含红包图片和点击事件处理逻辑。可以使用 v-for 动…

js如何实现继承

js如何实现继承

原型链继承 通过将子类的原型指向父类的实例实现继承。子类实例能够访问父类原型上的属性和方法。 function Parent() { this.name = 'parent'; } Parent…

js实现换肤

js实现换肤

使用CSS变量实现换肤 通过CSS变量可以轻松实现主题切换功能。CSS变量在根元素中定义,通过JavaScript动态修改这些变量值。 :root { --primary-color: #349…

jquery js

jquery js

jQuery 简介 jQuery 是一个快速、简洁的 JavaScript 库,简化了 HTML 文档遍历、事件处理、动画和 Ajax 交互。它兼容多种浏览器,提供易于使用的 API,使开发者能够更高…

js实现祖玛

js实现祖玛

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

js实现吸色

js实现吸色

使用Canvas实现吸色功能 通过Canvas的getImageData方法获取像素颜色数据。创建一个Canvas元素,将目标图像绘制到Canvas上,通过鼠标事件获取坐标对应的颜色值。 c…