当前位置:首页 > JavaScript

JS实现简易转盘抽奖

2026-01-31 02:04:16JavaScript

JS实现简易转盘抽奖

JS实现简易转盘抽奖

实现思路

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

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 和 JavaScript 实现一个可旋转的圆盘,配合 Vue 的数据驱动特性动态控制奖品列表和旋转动画。关键点包括圆盘的扇形分割、旋转…

使用vue实现简易网页

使用vue实现简易网页

使用 Vue 实现简易网页 创建 Vue 项目 使用 Vue CLI 快速初始化项目,确保已安装 Node.js 和 npm。 运行以下命令创建项目: npm install -g @vue/c…

css制作转盘

css制作转盘

使用CSS制作转盘 转盘的基本结构 HTML结构需要包含一个转盘容器和指针元素。以下是一个简单的HTML结构示例: <div class="wheel-container"> <…

php实现转盘

php实现转盘

PHP实现转盘功能 转盘功能常见于抽奖活动,以下是实现转盘抽奖的PHP代码示例: <?php // 奖项配置 $prizes = [ ['id' => 1, 'name' =&g…

java js实现转盘抽奖

java js实现转盘抽奖

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

js实现简易换肤

js实现简易换肤

实现简易换肤的方法 通过JavaScript实现简易换肤功能,通常涉及动态修改CSS样式或切换CSS文件。以下是几种常见方法: 使用CSS变量切换主题 定义CSS变量并在JavaScript中修改这…