当前位置:首页 > JavaScript

js实现九宫格抽奖

2026-03-01 08:08:03JavaScript

实现九宫格抽奖的步骤

HTML结构
创建一个包含9个格子的容器,通常使用<div>元素排列成3x3的网格。每个格子代表一个奖项。

<div class="lottery-grid">
  <div class="grid-item" data-index="0">奖品1</div>
  <div class="grid-item" data-index="1">奖品2</div>
  <div class="grid-item" data-index="2">奖品3</div>
  <div class="grid-item" data-index="7">奖品8</div>
  <div class="grid-item" data-index="8">奖品9</div>
  <div class="grid-item" data-index="3">奖品4</div>
  <div class="grid-item" data-index="6">奖品7</div>
  <div class="grid-item" data-index="5">奖品6</div>
  <div class="grid-item" data-index="4">奖品5</div>
</div>
<button id="start-btn">开始抽奖</button>

CSS样式
使用CSS将格子排列成九宫格布局,并添加高亮样式用于抽奖时的视觉效果。

.lottery-grid {
  display: grid;
  grid-template-columns: repeat(3, 100px);
  grid-template-rows: repeat(3, 100px);
  gap: 10px;
  margin: 20px auto;
  width: 320px;
}

.grid-item {
  display: flex;
  align-items: center;
  justify-content: center;
  background-color: #f0f0f0;
  border: 1px solid #ccc;
  cursor: pointer;
}

.grid-item.highlight {
  background-color: #ffcc00;
  border-color: #ff9900;
}

JavaScript逻辑
实现抽奖的核心逻辑,包括高亮格子的移动和最终结果的判定。

js实现九宫格抽奖

document.getElementById('start-btn').addEventListener('click', startLottery);

function startLottery() {
  const items = document.querySelectorAll('.grid-item');
  const totalSteps = 30; // 总高亮移动步数
  let currentStep = 0;
  let currentIndex = 0;
  const speed = 100; // 初始速度(毫秒)

  // 随机决定中奖格子(实际项目中可能由后端返回)
  const prizeIndex = Math.floor(Math.random() * 9);

  // 清除所有高亮
  items.forEach(item => item.classList.remove('highlight'));

  // 开始动画
  const interval = setInterval(() => {
    items[currentIndex].classList.remove('highlight');
    currentIndex = (currentIndex + 1) % 9;
    items[currentIndex].classList.add('highlight');

    currentStep++;
    if (currentStep > totalSteps) {
      // 最后几步减速
      if (currentStep > totalSteps + 5 && currentIndex === prizeIndex) {
        clearInterval(interval);
        setTimeout(() => {
          alert(`恭喜获得: ${items[prizeIndex].textContent}`);
        }, 500);
      }
    }
  }, speed);
}

关键点说明

格子遍历顺序
九宫格的高亮移动需要按照顺时针或逆时针方向遍历。示例中通过data-index属性自定义顺序,确保视觉上的环绕效果。

速度控制
通过setInterval的时间参数和总步数控制抽奖动画的时长。后期可通过动态调整速度实现减速效果。

js实现九宫格抽奖

中奖逻辑
示例使用随机数模拟中奖结果。实际项目中通常由后端接口返回中奖数据以保证公平性。

扩展功能

  • 添加音效增强体验
  • 支持多轮抽奖和奖品库存管理
  • 增加动画缓动效果使停止更自然

标签: 九宫格js
分享给朋友:

相关文章

vue实现九宫格首页

vue实现九宫格首页

使用Vue实现九宫格首页 九宫格布局常用于移动端首页导航,以下是基于Vue的实现方法: 基础HTML结构 <template> <div class="grid-con…

js实现继承

js实现继承

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

js实现图片上传

js实现图片上传

图片上传的基本实现 使用HTML的<input type="file">元素配合JavaScript的File API可以实现图片上传功能。HTML部分需要创建一个文件选择输入框和一个用于…

js实现论坛

js实现论坛

实现论坛的基本功能 使用JavaScript实现一个论坛需要结合前端和后端技术。前端可以使用React、Vue或Angular等框架,后端可以选择Node.js配合Express或Koa框架。数据库可…

js实现dh

js实现dh

JavaScript 实现 DH(Diffie-Hellman)密钥交换 Diffie-Hellman(DH)密钥交换是一种安全协议,允许双方在不安全的通信信道上建立一个共享密钥。以下是如何在 Jav…

js钟表实现

js钟表实现

实现JavaScript钟表的基本方法 创建一个简单的JavaScript钟表可以通过以下步骤完成,涵盖数字和模拟两种形式。 数字钟表实现 HTML结构只需一个显示时间的容器: <div i…