当前位置:首页 > JavaScript

js实现转盘抽奖

2026-03-01 02:12:43JavaScript

实现转盘抽奖的基本思路

转盘抽奖的核心是通过旋转动画随机停止在某个奖品区域。需要定义奖品区域角度、旋转动画逻辑以及停止后的回调处理。

HTML结构

创建转盘容器和抽奖按钮的HTML结构:

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

CSS样式

使用CSS绘制转盘和定义动画:

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

.wheel {
  width: 100%;
  height: 100%;
  border-radius: 50%;
  position: relative;
  overflow: hidden;
  transition: transform 4s cubic-bezier(0.17, 0.67, 0.12, 0.99);
  transform: rotate(0deg);
}

/* 奖品扇形区域样式 */
.wheel .section {
  position: absolute;
  width: 50%;
  height: 50%;
  transform-origin: 100% 100%;
}

#spin-btn {
  margin-top: 20px;
  padding: 10px 20px;
}

JavaScript逻辑

实现转盘旋转和随机停止逻辑:

const prizes = [
  { text: "奖品1", color: "#FF6384", angle: 45 },
  { text: "奖品2", color: "#36A2EB", angle: 90 },
  { text: "奖品3", color: "#FFCE56", angle: 135 },
  { text: "奖品4", color: "#4BC0C0", angle: 180 },
  { text: "奖品5", color: "#9966FF", angle: 225 },
  { text: "奖品6", color: "#FF9F40", angle: 270 },
  { text: "奖品7", color: "#8AC24A", angle: 315 },
  { text: "奖品8", color: "#F06292", angle: 360 }
];

const wheel = document.querySelector('.wheel');
const spinBtn = document.getElementById('spin-btn');

// 创建转盘扇形
function createWheelSections() {
  prizes.forEach((prize, index) => {
    const section = document.createElement('div');
    section.className = 'section';
    section.style.backgroundColor = prize.color;
    section.style.transform = `rotate(${index * 45}deg)`;

    const text = document.createElement('div');
    text.textContent = prize.text;
    text.style.position = 'absolute';
    text.style.transform = 'rotate(22.5deg) translate(30px)';
    text.style.transformOrigin = '0 0';

    section.appendChild(text);
    wheel.appendChild(section);
  });
}

// 旋转转盘
function spinWheel() {
  spinBtn.disabled = true;
  const randomSpin = 3600 + Math.floor(Math.random() * 360); // 随机旋转角度
  wheel.style.transform = `rotate(${randomSpin}deg)`;

  setTimeout(() => {
    spinBtn.disabled = false;
    const actualDeg = randomSpin % 360;
    const winnerIndex = Math.floor(actualDeg / 45);
    alert(`恭喜获得: ${prizes[winnerIndex].text}`);
  }, 4000);
}

createWheelSections();
spinBtn.addEventListener('click', spinWheel);

进阶优化

添加缓动动画效果:

wheel.style.transition = 'transform 4s cubic-bezier(0.17, 0.67, 0.12, 0.99)';

增加指针元素:

js实现转盘抽奖

<div class="pointer"></div>
.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;
  z-index: 10;
}

注意事项

  • 奖品区域角度需要均分360度
  • 旋转动画结束后需要计算实际停止位置
  • 多次快速点击需要防抖处理
  • 移动端需要考虑触摸事件兼容

标签: 转盘js
分享给朋友:

相关文章

css3结合js制作

css3结合js制作

CSS3 结合 JavaScript 制作动态效果 CSS3 和 JavaScript 结合可以实现丰富的动态效果,包括动画、交互和响应式设计。以下是几种常见的实现方式: CSS3 动画与 Java…

js实现vue

js实现vue

Vue.js 简介 Vue.js 是一个渐进式 JavaScript 框架,用于构建用户界面。其核心库专注于视图层,易于与其他库或现有项目整合。 实现 Vue.js 的基本步骤 安装 Vue.j…

js 实现倒计时

js 实现倒计时

实现倒计时的基本方法 使用 JavaScript 实现倒计时可以通过 setInterval 或 setTimeout 结合日期计算来完成。以下是两种常见实现方式。 使用 setInterval 实…

js实现抽奖

js实现抽奖

实现抽奖功能的基本思路 抽奖功能的核心是随机选择奖项并展示结果。可以通过数组存储奖项,利用随机数生成索引,最后通过动画增强用户体验。 准备奖项数据 定义一个数组存储奖项信息,每个奖项可以包含名称、图…

js实现交换

js实现交换

交换变量的方法 在JavaScript中,交换两个变量的值有多种方法。以下是常见的几种实现方式: 使用临时变量 通过引入一个临时变量来存储其中一个变量的值,实现交换: let a = 1; le…

js 实现跳转

js 实现跳转

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