当前位置:首页 > JavaScript

JS实现简易转盘抽奖

2026-01-31 02:04:16JavaScript

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. 移动端需添加触摸事件支持

JS实现简易转盘抽奖

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

相关文章

vue实现转盘抽奖

vue实现转盘抽奖

实现思路 Vue实现转盘抽奖的核心是通过CSS动画控制转盘旋转,结合Vue的数据绑定和计算属性动态控制旋转角度和结果判定。关键点包括转盘布局、动画触发、结果计算和回调处理。 转盘布局设计 使用CSS…

vue 实现转盘抽奖

vue 实现转盘抽奖

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

实现简易vue响应式

实现简易vue响应式

实现简易 Vue 响应式系统 Vue 的响应式系统核心是通过 Object.defineProperty 或 Proxy 拦截数据变化,并结合依赖收集与派发更新机制实现。以下是一个基于 Object.…

php实现转盘

php实现转盘

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

js实现转盘

js实现转盘

实现转盘的基本思路 使用HTML5的Canvas或CSS3的旋转动画结合JavaScript实现转盘效果。核心是通过旋转角度计算奖品位置,并添加动画过渡效果。 HTML结构 <div clas…

js实现简易换肤

js实现简易换肤

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