当前位置:首页 > 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.js实现轮播

vue.js实现轮播

Vue.js 实现轮播功能 使用第三方库(推荐) Vue.js 生态中有许多成熟的轮播组件库,例如 vue-awesome-swiper 或 swiper,它们功能丰富且易于集成。 安装 swip…

js实现倒计时

js实现倒计时

使用 setInterval 实现倒计时 通过 setInterval 定时器每秒更新剩余时间,适用于简单倒计时场景。 function countdown(seconds, callback)…

js实现pdf在线预览

js实现pdf在线预览

使用PDF.js实现PDF在线预览 PDF.js是由Mozilla开发的一个开源JavaScript库,可以在网页中直接渲染PDF文件。以下是实现PDF在线预览的步骤: 引入PDF.js库 在HT…

js 实现分页

js 实现分页

实现分页的基本逻辑 分页功能通常需要后端返回数据总量或总页数,前端根据当前页码和每页条数截取对应数据。以下是一个基于JavaScript的简单分页实现方案: 前端分页实现 假设已有从后端获取的完整…

js实现拷贝

js实现拷贝

实现文本拷贝 使用 document.execCommand 方法(已废弃但兼容性较好): function copyText(text) { const textarea = documen…

js实现瀑布流

js实现瀑布流

实现瀑布流布局 瀑布流布局是一种常见的网页布局方式,常用于图片展示、商品列表等场景。以下是使用 JavaScript 实现瀑布流布局的几种方法。 纯 JavaScript 实现 通过计算元素的位置…