当前位置:首页 > JavaScript

JS实现简易转盘抽奖

2026-01-31 02:04:16JavaScript

实现思路

使用HTML+CSS构建转盘界面,通过JavaScript控制旋转动画和抽奖逻辑。核心是随机生成旋转角度,结合CSS过渡效果实现平滑停止。

JS实现简易转盘抽奖

HTML结构

<div class="wheel-container">
  <div class="wheel"></div>
  <button class="spin-btn">开始抽奖</button>
  <div class="pointer"></div>
</div>

CSS样式

.wheel-container {
  position: relative;
  width: 300px;
  height: 300px;
  margin: 0 auto;
}

.wheel {
  width: 100%;
  height: 100%;
  border-radius: 50%;
  background: conic-gradient(
    red 0deg 60deg,
    blue 60deg 120deg,
    green 120deg 180deg,
    yellow 180deg 240deg,
    purple 240deg 300deg,
    orange 300deg 360deg
  );
  transition: transform 4s cubic-bezier(0.17, 0.67, 0.21, 0.99);
}

.pointer {
  position: absolute;
  top: -20px;
  left: 50%;
  transform: translateX(-50%);
  width: 0;
  height: 0;
  border-left: 15px solid transparent;
  border-right: 15px solid transparent;
  border-top: 30px solid black;
}

.spin-btn {
  display: block;
  margin: 20px auto;
  padding: 10px 20px;
  background: #4CAF50;
  color: white;
  border: none;
  border-radius: 5px;
  cursor: pointer;
}

JavaScript逻辑

const wheel = document.querySelector('.wheel');
const spinBtn = document.querySelector('.spin-btn');
let isSpinning = false;

spinBtn.addEventListener('click', () => {
  if (isSpinning) return;

  isSpinning = true;
  const segments = 6; // 转盘分段数
  const minSpin = 3; // 最小旋转圈数
  const maxSpin = 8; // 最大旋转圈数

  // 随机生成旋转角度(完整圈数+随机停止位置)
  const spinDegrees = Math.floor(Math.random() * (maxSpin - minSpin + 1) + minSpin) * 360;
  const finalAngle = spinDegrees + (360 - (spinDegrees % 360) / segments * segments);

  wheel.style.transform = `rotate(${-finalAngle}deg)`;

  setTimeout(() => {
    isSpinning = false;
    const winningSegment = Math.floor((finalAngle % 360) / (360 / segments));
    alert(`恭喜获得: ${['一等奖', '二等奖', '三等奖', '四等奖', '五等奖', '六等奖'][winningSegment]}`);
  }, 4000);
});

功能扩展建议

  1. 奖品数据可配置化,改为从数组动态生成转盘
  2. 添加音效增强体验感
  3. 实现后端接口对接真实抽奖数据
  4. 增加抽奖次数限制功能
  5. 使用Canvas绘制更复杂的转盘样式

注意事项

  1. 旋转动画使用CSS transition实现,确保性能优化
  2. 最终停止位置计算需考虑转盘分段数
  3. 防抖处理避免重复点击
  4. 角度计算时注意顺时针/逆时针方向
  5. 移动端需添加触摸事件支持

标签: 转盘简易
分享给朋友:

相关文章

vue 实现转盘抽奖

vue 实现转盘抽奖

实现思路 使用Vue结合CSS动画和随机数生成实现转盘抽奖功能。核心是通过CSS控制转盘旋转,通过JavaScript计算旋转角度和结果判定。 基础HTML结构 <template>…

java js实现转盘抽奖

java js实现转盘抽奖

实现转盘抽奖的步骤 HTML结构 创建转盘抽奖的基本HTML结构,包括转盘区域和抽奖按钮。 <div id="wheel"> <canvas id="wheelCanv…

简易实现vue

简易实现vue

简易 Vue 实现核心思路 创建一个极简的 Vue 实现需要理解其核心机制:数据响应式、模板编译和虚拟 DOM。以下是一个简化版实现框架,仅包含核心功能。 数据响应式系统 通过 Object.def…

vue实现转盘效果

vue实现转盘效果

实现转盘效果的基本思路 使用Vue实现转盘效果需要结合CSS动画和JavaScript逻辑。转盘通常包括一个圆形区域,分割为多个扇形区块,点击按钮后触发旋转动画,最终停在某个奖项上。 创建转盘组件结…

vue实现简易todolist

vue实现简易todolist

实现简易TodoList的步骤 创建Vue项目 使用Vue CLI创建一个新项目,运行以下命令: vue create todo-list cd todo-list npm run serve 组件…

vue转盘布局实现

vue转盘布局实现

Vue 转盘布局实现 基本思路 转盘布局通常用于抽奖或展示环形排列的内容。核心是通过CSS实现圆形排列,结合Vue动态渲染元素和交互逻辑。 实现步骤 HTML 结构 <template>…