当前位置:首页 > 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逻辑
实现抽奖的核心逻辑,包括高亮格子的移动和最终结果的判定。

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
分享给朋友:

相关文章

js实现乘

js实现乘

JavaScript 实现乘法运算 在 JavaScript 中实现乘法运算可以通过多种方式完成,包括基本运算符、函数封装以及高级算法(如大数乘法)。以下是几种常见方法: 使用基本乘法运算符 Jav…

js 实现vue

js 实现vue

Vue.js 的基本实现 在 JavaScript 中实现 Vue.js 的核心功能,可以通过数据绑定、响应式系统和虚拟 DOM 来实现。以下是实现 Vue.js 核心功能的简化版本。 数据响应式系…

js实现报表

js实现报表

使用JavaScript实现报表 在JavaScript中实现报表功能可以通过多种方式完成,常见的方法包括使用原生JavaScript、第三方库(如Chart.js、D3.js)或结合后端数据渲染。以…

js实现游标

js实现游标

使用JavaScript实现游标 在JavaScript中,可以通过操作DOM元素的cursor样式属性来实现自定义游标效果。以下是几种常见的实现方法: 修改默认鼠标指针样式 通过CSS的curso…

js实现vue路由

js实现vue路由

Vue 路由的基本实现 在 Vue.js 中实现路由功能通常使用 Vue Router 库。Vue Router 是 Vue.js 官方的路由管理器,用于构建单页面应用(SPA)。 安装 Vue R…

js实现按钮点击

js实现按钮点击

实现按钮点击的JavaScript方法 HTML按钮元素 在HTML中创建按钮元素,为其添加id或class以便JavaScript选择: <button id="myButton">点…