当前位置:首页 > JavaScript

js实现九宫格抽奖

2026-04-04 08:44:57JavaScript

实现九宫格抽奖的核心思路

九宫格抽奖的核心在于动态控制奖品高亮顺序,最终停在目标奖品位置。以下是具体实现步骤:

HTML 结构设计

采用 ulli 构建九宫格布局,每个格子包含奖品信息:

<div class="lottery-container">
  <ul class="lottery-grid">
    <li data-index="0">奖品1</li>
    <li data-index="1">奖品2</li>
    <li data-index="2">奖品3</li>
    <li data-index="8">奖品4</li>
    <li class="start-btn">开始</li>
    <li data-index="4">奖品5</li>
    <li data-index="7">奖品6</li>
    <li data-index="6">奖品7</li>
    <li data-index="5">奖品8</li>
  </ul>
</div>

CSS 样式设置

使用 Flex 布局实现九宫格,定义高亮状态样式:

js实现九宫格抽奖

.lottery-grid {
  display: flex;
  flex-wrap: wrap;
  width: 300px;
  list-style: none;
  padding: 0;
}

.lottery-grid li {
  width: 100px;
  height: 100px;
  border: 1px solid #ccc;
  display: flex;
  justify-content: center;
  align-items: center;
  cursor: pointer;
}

.lottery-grid li.active {
  background-color: #ffeb3b;
  box-shadow: 0 0 10px gold;
}

.start-btn {
  background-color: #4CAF50;
  color: white;
}

JavaScript 核心逻辑

初始化变量

定义格子索引的遍历顺序(顺时针方向)和动画参数:

const gridOrder = [0, 1, 2, 5, 8, 7, 6, 3]; // 九宫格高亮顺序
let currentIndex = 0;
let speed = 100; // 初始速度
let timer = null;
let cycles = 0; // 旋转圈数
const totalCycles = 3; // 总旋转圈数
const targetPrize = 4; // 假设抽中奖品5

高亮切换函数

控制格子高亮状态的切换:

js实现九宫格抽奖

function highlightNext() {
  document.querySelector('.active')?.classList.remove('active');
  const currentCell = document.querySelector(`[data-index="${gridOrder[currentIndex]}"]`);
  currentCell.classList.add('active');

  currentIndex = (currentIndex + 1) % gridOrder.length;
  if (currentIndex === 0) cycles++;
}

开始抽奖函数

实现加速-减速动画效果:

function startLottery() {
  if (timer) return;

  timer = setInterval(() => {
    highlightNext();

    if (cycles >= totalCycles && gridOrder[currentIndex] === targetPrize) {
      clearInterval(timer);
      timer = null;
      cycles = 0;
      alert(`恭喜获得: ${document.querySelector(`[data-index="${targetPrize}"]`).textContent}`);
    } else {
      speed = cycles >= totalCycles ? 
        Math.min(speed + 20, 200) : // 减速阶段
        Math.max(speed - 5, 50);    // 加速阶段
      clearInterval(timer);
      timer = setInterval(arguments.callee, speed);
    }
  }, speed);
}

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

完整代码示例

整合所有部分的可运行代码:

<!DOCTYPE html>
<html>
<head>
  <style>
    .lottery-grid { /* 前述CSS样式 */ }
  </style>
</head>
<body>
  <!-- 前述HTML结构 -->

  <script>
    // 前述JavaScript逻辑
  </script>
</body>
</html>

关键优化点

  1. 动画平滑度:通过动态调整 setInterval 的间隔时间实现加速减速效果
  2. 性能考虑:使用 classList 替代直接操作 className
  3. 可配置性totalCyclestargetPrize 可改为从后端接口动态获取
  4. 防重复点击:通过 timer 变量防止抽奖过程中重复触发

扩展功能建议

  1. 接口集成:将 targetPrize 改为从后端接口获取真实抽奖结果
  2. 多奖品支持:扩展为 3x3 以上的格子布局
  3. 音效增强:添加背景音乐和中奖音效
  4. 移动端适配:通过 CSS Media Query 适配不同屏幕尺寸

通过上述实现,可构建一个具有视觉动态效果的九宫格抽奖系统。实际应用中需根据具体需求调整动画参数和奖品配置。

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

相关文章

jquery.js

jquery.js

jQuery 是一个快速、简洁的 JavaScript 库,简化了 HTML 文档遍历、事件处理、动画设计和 Ajax 交互等操作。以下是关于 jQuery.js 的核心信息和使用方法: 获取 jQ…

js实现视口

js实现视口

js实现视口检测的方法 使用JavaScript检测元素是否进入视口(viewport)可以通过Intersection Observer API或手动计算元素位置实现。以下是两种常见方法: Int…

js实现文字滚动

js实现文字滚动

实现文字滚动的几种方法 使用CSS动画实现滚动 通过CSS的@keyframes和transform属性可以实现平滑的文字滚动效果。 <style> .scroll-text { w…

js 实现跳转

js 实现跳转

使用 window.location.href 进行跳转 通过修改 window.location.href 可以跳转到指定 URL,浏览器会加载新页面: window.location.hre…

js实现 拖动

js实现 拖动

实现拖动的步骤 HTML 结构 创建一个可拖动的元素和一个放置区域: <div id="draggable" draggable="true">拖动我</div> <d…

js实现左右滑动

js实现左右滑动

实现左右滑动的 JavaScript 方法 监听触摸事件 通过 touchstart、touchmove 和 touchend 事件来检测用户的手势操作。记录触摸的起始位置和移动距离,判断滑动方向。…