当前位置:首页 > JavaScript

JS实现简易转盘抽奖

2026-03-01 17:09:36JavaScript

实现思路

使用HTML、CSS和JavaScript创建一个简易转盘抽奖功能。核心逻辑是通过CSS旋转动画模拟转盘效果,JavaScript控制旋转时间和结果判定。

HTML结构

<div class="wheel-container">
  <div class="wheel"></div>
  <button id="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 0% 25%,
    green 25% 50%,
    blue 50% 75%,
    yellow 75% 100%
  );
  transition: transform 4s cubic-bezier(0.17, 0.67, 0.12, 0.99);
  transform: rotate(0deg);
}

.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 #333;
}

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

JavaScript逻辑

const wheel = document.querySelector('.wheel');
const spinBtn = document.getElementById('spin-btn');
const segments = 4; // 对应CSS中的颜色分段
let isSpinning = false;

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

  isSpinning = true;
  const randomRotation = 360 * 5 + Math.floor(Math.random() * 360);
  wheel.style.transform = `rotate(${randomRotation}deg)`;

  setTimeout(() => {
    isSpinning = false;
    const actualRotation = randomRotation % 360;
    const segmentAngle = 360 / segments;
    const winningSegment = Math.floor(actualRotation / segmentAngle);

    const colors = ['red', 'green', 'blue', 'yellow'];
    alert(`恭喜获得: ${colors[winningSegment]}区域奖品`);
  }, 4000);
});

功能扩展建议

  1. 奖品配置化:将奖品信息存储在数组中,便于修改和管理
  2. 动画优化:添加开始和结束的缓动效果
  3. 中奖概率控制:为不同区域设置不同的中奖概率
  4. 响应式设计:适应不同屏幕尺寸

注意事项

  1. 确保CSS的transition时间与JavaScript的setTimeout时间一致
  2. 旋转角度计算需要考虑模360运算,以确定最终停止位置
  3. 防抖处理防止用户连续点击
  4. 跨浏览器兼容性测试

JS实现简易转盘抽奖

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

相关文章

vue怎么实现转盘

vue怎么实现转盘

Vue 实现转盘功能 使用 CSS 动画和 Vue 数据绑定 创建一个转盘组件,使用 CSS 的 transform 和 transition 属性实现旋转效果。Vue 负责管理旋转角度和触发动画。…

vue实现大转盘

vue实现大转盘

实现大转盘的基本思路 使用Vue实现大转盘需要结合CSS动画和JavaScript逻辑。大转盘通常包含一个可旋转的圆盘和多个奖项区域,通过触发旋转动画并最终停在某个奖项上完成抽奖过程。 HTML结构…

vue2简易实现

vue2简易实现

Vue2 简易实现 Vue2 是一个渐进式 JavaScript 框架,用于构建用户界面。以下是一个简易的 Vue2 实现示例,涵盖核心功能如数据绑定、指令和组件化。 安装 Vue2 通过 CDN…

vue转盘抽奖布局实现

vue转盘抽奖布局实现

Vue 转盘抽奖布局实现 基本思路 转盘抽奖的核心是通过 CSS 和 JavaScript 实现一个可旋转的圆盘,配合 Vue 的数据驱动特性动态控制奖品列表和旋转动画。关键点包括圆盘的扇形分割、旋转…

实现简易react

实现简易react

实现简易 React 的核心要素 要实现一个简易 React,需要模拟其核心功能:虚拟 DOM、组件化、状态管理和渲染机制。以下是关键步骤和代码示例。 虚拟 DOM 结构 虚拟 DOM 是真实 D…

php实现转盘

php实现转盘

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