使用纯CSS和JavaScript来实现一个转盘抽奖效果

news/2024/10/11 4:20:10/

使用纯CSS和JavaScript来实现一个转盘抽奖效果,抽到机率相同

javascript"><!DOCTYPE html>
<html lang="zh"><head><meta charset="UTF-8" /><meta name="viewport" content="width=device-width, initial-scale=1.0" /><title>转盘抽奖</title><style>body {display: flex;justify-content: center;align-items: center;height: 100vh;margin: 0;background-color: #f7f7f7;}.container {position: relative;width: 300px;height: 300px;}/* 轮盘容器 */.wheel {width: 100%;height: 100%;border-radius: 50%;border: 5px solid #333;position: relative;overflow: hidden;transform: rotate(-36deg);transition: transform 5s ease-out;}/* 使用 clip-path 切分成10个扇形,并设置z-index */.wheel div {position: absolute;width: 100%;height: 100%;clip-path: polygon(50% 50%, 87% -3%, 100% 33%);transform-origin: 50% 50%;z-index: 1;}/* 设置每个扇形区域的颜色和旋转角度 */.wheel div:nth-child(1) {background-color: #f39c12;transform: rotate(0deg);}.wheel div:nth-child(2) {background-color: #e74c3c;transform: rotate(36deg);}.wheel div:nth-child(3) {background-color: #8e44ad;transform: rotate(72deg);}.wheel div:nth-child(4) {background-color: #3498db;transform: rotate(108deg);}.wheel div:nth-child(5) {background-color: #1abc9c;transform: rotate(144deg);}.wheel div:nth-child(6) {background-color: #27ae60;transform: rotate(180deg);}.wheel div:nth-child(7) {background-color: #f1c40f;transform: rotate(216deg);}.wheel div:nth-child(8) {background-color: #2ecc71;transform: rotate(252deg);}.wheel div:nth-child(9) {background-color: #e67e22;transform: rotate(288deg);}.wheel div:nth-child(10) {background-color: #c0392b;transform: rotate(324deg);}/* 奖项名称的显示 */.wheel div span {position: absolute;top: 50%;left: 50%;transform: translate(150%, -380%) rotate(-45deg);font-size: 12px;color: #fff;text-align: center;}/* 指针样式 */.pointer {position: absolute;top: 50%;left: 50%;width: 0;height: 0;border-left: 4px solid transparent;border-right: 4px solid transparent;border-bottom: 130px solid #333;transform: translate(4%, -96%);transform-origin: bottom center; /* 将旋转中心点移到指针底部 */z-index: 10;}button {width: 100px;height: 32px;border-radius: 20px;margin-top: 40px;}</style></head><body><div style="display: flex; flex-direction: column; align-items: center"><div class="container"><div class="wheel" id="wheel"><div><span>一等奖</span></div><div><span>二等奖</span></div><div><span>三等奖</span></div><div><span>四等奖</span></div><div><span>五等奖</span></div><div><span>六等奖</span></div><div><span>七等奖</span></div><div><span>八等奖</span></div><div><span>九等奖</span></div><div><span>十等奖</span></div></div><div class="pointer"></div></div><button onclick="spinPointer()">开始抽奖</button></div><script>let spinning = falsefunction spinPointer() {if (spinning) returnspinning = trueconst pointer = document.querySelector('.pointer')const randomDegree = Math.floor(Math.random() * 360) // 随机角度const finalDegree = 360 * 3 + randomDegree // 确保指针至少旋转3圈// 旋转指针pointer.style.transition = 'transform 2s ease-out'pointer.style.transform = `translate(4%, -96%) rotate(${finalDegree}deg)`setTimeout(() => {spinning = falseconst resultDegree = randomDegree % 360 // 获取最终位置console.log(resultDegree, randomDegree, 'randomDegree')alert(`抽到的奖项是:${getResult(resultDegree)}`)}, 2000) // 2秒后显示结果}function getResult(degree) {const segmentDegrees = 360 / 10 // 每个扇形的度数const index =Math.floor((degree + segmentDegrees / 2) / segmentDegrees) % 10 // 计算对应的奖项索引const awards = ['一等奖','二等奖','三等奖','四等奖','五等奖','六等奖','七等奖','八等奖','九等奖','十等奖']return awards[index]}</script></body>
</html>

http://www.ppmy.cn/news/1537262.html

相关文章

手游和应用出海资讯:字节跳动《Lemon8》在美下载量飙升;美团海外版《Keeta》进军沙特市场

NetMarvel帮助游戏和应用广告主洞察全球市场、获取行业信息&#xff0c;以下为10月第一周资讯&#xff1a; ● OpenAI Sora负责人加盟 Google DeepMind ● 字节跳动《Lemon8》登顶美国App Store排行榜 ● 消息称腾讯与Guillemot家族考虑收购育碧 ● OpenAI官宣获66亿美元融资 ●…

宠物空气净化器哪个牌子吸毛好?希喂、IAM、352真实测评

前段时间忙活了个大工程——热门宠物空气净化器大横评&#xff0c;通过多方位的测试&#xff0c;帮助不少朋友解决了宠物空气净化器的选购难题。 但我们还不局限于此&#xff0c;在从事家电行业这些年间&#xff0c;我们还花费大价钱购置一堆产品实测体验过各类大小家电产品&a…

C++语言学习要点

C11和C20是C语言发展史上的两个重要里程碑&#xff0c;它们引入了许多新特性&#xff0c;极大地丰富了C的功能和表达能力。 C11 的一些值得关注的特性包括&#xff1a; 自动类型推导&#xff08;Auto&#xff09;&#xff1a;允许编译器自动推导变量的类型。decltype&#xf…

光伏开发:一充一放和两充两放是什么意思?

一充一放 一充一放是指储能设备在一次充电过程中充满电&#xff0c;并在一次放电过程中将电能全部释放。这种模式的原理相对简单&#xff0c;充电时电能转化为化学能或其他形式的能量储存&#xff0c;放电时则将这些能量转化回电能供应给负载。一充一放模式适用于对储能设备充…

喜讯!迈威通信TSN产品通过“时间敏感网络(TSN)产业链名录计划”评测,各项指标名列前茅

TSN技术&#xff0c;作为推动企业网络化与智能化转型的关键力量&#xff0c;已成为工业网络迈向下一代演进的共识方向&#xff0c;正加速重构工业网络的技术架构与产业生态。为响应这一趋势&#xff0c;工业互联网产业联盟携手中国信息通信研究院及50余家产学研用单位&#xff…

王道408考研数据结构-图-第六章

6.1 图的基本概念 6.1.1 图的定义 图G由顶点集V和边集 E组成&#xff0c;记为G(V,E),其中 V(G)表示图G中顶点的有限非空集&#xff1b;E(G)表示图G中顶点之间的关系(边)集合。若V{v?,v?,…,vn},则用|M表示图G中顶第6章 点的个数&#xff0c;E{(u,v) | uεV,vεV},用|E|表示图…

YOLO11改进|卷积篇|RFAConv创新空间注意力和标准卷积操作

目录 一、RFAConv卷积1.1RFAConv卷积介绍1.2RFAConv核心代码 五、添加RFAConv卷积5.1STEP15.2STEP25.3STEP35.4STEP4 六、yaml文件与运行6.1yaml文件6.2运行成功截图 一、RFAConv卷积 1.1RFAConv卷积介绍 RFAConv卷积操作提出了一种融合了空间注意力机制和标准卷积操作的新型卷…

LeetCode讲解篇之1043. 分隔数组以得到最大和

文章目录 题目描述题解思路题解代码题目链接 题目描述 题解思路 对于这题我们这么考虑&#xff0c;我们选择以数字的第i个元素做为分隔子数组的右边界&#xff0c;我们需要计算当前分隔子数组的长度为多少时能让数组[0, i]进行分隔数组的和最大 我们用数组f表示[0, i)区间内的…