当前位置:首页 > JavaScript

js 实现转盘

2026-04-05 10:19:25JavaScript

JavaScript 实现转盘效果

创建 HTML 结构

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

添加 CSS 样式

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

.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);
}

.spin-btn {
  margin-top: 20px;
  padding: 10px 20px;
  font-size: 16px;
}

JavaScript 实现旋转逻辑

const wheel = document.querySelector('.wheel');
const spinBtn = document.getElementById('spin-btn');
const segments = 8; // 转盘分段数
const colors = ['#FF0000', '#FF7F00', '#FFFF00', '#00FF00', '#0000FF', '#4B0082', '#9400D3', '#FF1493'];

// 创建转盘扇形
function createWheel() {
  const angle = 360 / segments;
  for (let i = 0; i < segments; i++) {
    const segment = document.createElement('div');
    segment.style.position = 'absolute';
    segment.style.width = '50%';
    segment.style.height = '50%';
    segment.style.transformOrigin = '100% 100%';
    segment.style.transform = `rotate(${angle * i}deg) skewY(${90 - angle}deg)`;
    segment.style.backgroundColor = colors[i];
    wheel.appendChild(segment);
  }
}

// 旋转转盘
function spinWheel() {
  const spinDegrees = 360 * 5 + Math.floor(Math.random() * 360);
  wheel.style.transform = `rotate(${spinDegrees}deg)`;

  spinBtn.disabled = true;
  setTimeout(() => {
    spinBtn.disabled = false;
    const winningSegment = Math.floor(((spinDegrees % 360) / 360) * segments);
    alert(`恭喜获得: ${winningSegment + 1}号奖品`);
  }, 4000);
}

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

进阶优化方案

  1. 添加指针元素

    <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 #000;
    z-index: 10;
    }
  2. 添加奖品标签

    
    function addPrizeLabels() {
    const angle = 360 / segments;
    const radius = 150;

for (let i = 0; i < segments; i++) { const label = document.createElement('div'); const radian = (angle i + angle / 2) Math.PI / 180; const x = radius 0.7 Math.cos(radian); const y = radius 0.7 Math.sin(radian);

label.textContent = `奖品${i+1}`;
label.style.position = 'absolute';
label.style.left = `calc(50% + ${x}px)`;
label.style.top = `calc(50% + ${y}px)`;
label.style.transform = 'translate(-50%, -50%)';
wheel.appendChild(label);

} }

js 实现转盘


3. 添加音效
```javascript
function playSpinSound() {
  const audio = new Audio('spin-sound.mp3');
  audio.play();
}

注意事项

  1. 确保转盘容器设置为相对定位
  2. 旋转动画使用CSS transition实现平滑效果
  3. 计算获奖区域时要考虑旋转总圈数
  4. 移动端适配需要额外处理触摸事件
  5. 性能优化可考虑使用CSS硬件加速

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

相关文章

js实现轮播

js实现轮播

实现轮播图的基本思路 轮播图的核心逻辑是通过定时切换展示的图片或内容,通常结合左右滑动按钮和指示器(小圆点)增强交互性。以下是基于原生JavaScript的实现方法。 HTML结构 构建轮播图的HT…

js实现全屏

js实现全屏

实现全屏的基本方法 使用JavaScript实现全屏功能主要依赖Element.requestFullscreen()方法。现代浏览器均支持此API,但不同浏览器可能需要添加前缀。 // 触发全屏…

js实现密码

js实现密码

密码强度验证 使用正则表达式验证密码强度是一种常见方法。以下代码检查密码是否包含大小写字母、数字和特殊字符,且长度至少为8位: function checkPasswordStrength(pass…

js 实现跳转

js 实现跳转

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

js实现定位

js实现定位

使用Geolocation API获取当前位置 在JavaScript中,可以通过浏览器内置的Geolocation API获取用户的地理位置信息。该API需要用户授权才能访问位置数据。 if (n…

js 实现日历

js 实现日历

实现日历的基本思路 日历的核心功能是展示日期,并允许用户进行日期选择或导航。JavaScript 可以动态生成日历的 HTML 结构,并处理用户交互逻辑。 基础日历结构 日历通常包含头部(显示月份和…