阅读原文,微信扫描二维码, 手机关注公共号酒酒酒酒,搜索 JS 转盘抽奖效果

效果图

前置条件:

开发环境:windows

开发框架:js

编辑器:HbuilderX

正文开始

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="description" content="">
<meta name="author" content="熊仔其人">
<title>转盘抽奖效果</title>
<!-- 这里是css部分 -->
<style>
*{
padding: 0;
margin: 0;
list-style: none;
}
.outher,.wapper{
position: relative;
width: 300px;
height: 300px;
background-color: red;
border-radius: 50%;
overflow: hidden;
}
.wapper{
transform: rotate(22.5deg);
}
.left,.right{
width: 150px;
height: 100%;
overflow: hidden;
position: absolute;
}
.left div,.right div{
position: absolute;
width: 150px;
height: 100%; }
.left div{
transform-origin:right center;
}
.right div{
transform-origin:left center;
} .left{
left: 0;
background-color: burlywood;
}
.right{
right: 0;
background-color: blue;
}
.left div.one{
background-color: #fc7c78;
}
.left div.two{
background-color: #f59462;
transform: rotate(-45deg);
}
.left div.three{
background-color: #fc7c78;
transform: rotate(-90deg);
}
.left div.four{
background-color: #f59462;
transform: rotate(-135deg);
} .right div.one{
background-color: #f59462
}
.right div.two{
background-color: #fc7c78;
transform: rotate(45deg);
}
.right div.three{
background-color: #f59462;
transform: rotate(90deg);
}
.right div.four{
background-color: #ffffff;
transform: rotate(135deg);
} .left .text{
position: absolute;
left: 50%;
top:30px;
transform: rotate(-30deg);
}
.right .text{
position: absolute;
left: 12%;
top:30px;
transform: rotate(30deg);
}
.circle{
position: absolute;
width: 90px;
height: 90px;
background-color: orange;
left: 50%;
top: 50%;
transform: translate(-50%,-50%);
border-radius: 50%;
text-align: center;
line-height: 90px;
font-size: 30px;
font-weight: bold;
cursor: pointer;
user-select: none;
}
.circle::after{
content: '';
position: absolute;
top: -78px;
left: 50px;
transform: translate(-50%);
border: 40px solid orange;
border-left-width: 10px;
border-right-width: 10px;
border-left-color: transparent;
border-top-color: transparent;
border-right-color: transparent; }
</style>
</head>
<body>
<!-- 这里是HTML结构部分 -->
<div class="outher">
<div class="wapper">
<div class="left">
<div class="one">
<span class="text">1号大奖</span>
</div>
<div class="two">
<span class="text">2号大奖</span>
</div>
<div class="three">
<span class="text">3号大奖</span>
</div>
<div class="four">
<span class="text">4号大奖</span>
</div>
</div>
<div class="right">
<div class="one">
<span class="text">5号大奖</span>
</div>
<div class="two">
<span class="text">6号大奖</span>
</div>
<div class="three">
<span class="text">7号大奖</span>
</div>
<div class="four">
<span class="text">未中奖</span>
</div>
</div>
</div>
<div class="circle">
抽奖
</div>
</div>
<!-- 这里是js部分 -->
<script>
let wapper = document.querySelector(".wapper");
let textAll=document.querySelectorAll(".text");
let texts=["x1号大奖","x2号大奖","x3号大奖","x4号大奖","x5号大奖","x6号大奖","x7号大奖","未中奖"];
// 是否抽奖中
let isFlag=true; /*
中奖概率比重设置,最后一个数值越大,中奖概率越小
*/
let weight = [1,5,10,15,22,30,40,200];
// 循环得到奖项容器,给里面赋值奖项内容
for(let i=0;i<textAll.length;i++){
textAll[i].innerHTML=texts[i];
}
// 点击抽奖指针
document.querySelector(".circle").onclick=function(){
if(isFlag){
// 生成0~200的随机数,随机抽奖;生成的随机数越大,中奖概率越小
let random=parseInt(Math.random()*(weight[weight.length-1]));
/*
将生成的随机数合并到数组中,生成新的数组randomWeight
*/
let randomWeight=weight.concat(random); /*
将数组从小到大排序。此时生成的随机数将被排序到前面
生成的随机数小于weight数组中最后一个数字的会被放在前面
*/
let aa=randomWeight.sort(function(a,b){return a - b});
// 在新数组里面查找生成的随机数下标
let randomIndex = aa.indexOf(random);
// 找到随机数的下标,并且根据随机数的下标取到texts的奖项内容
switch(randomIndex){
case 0:
run(22.5,texts[randomIndex]);
break;
case 1:
run(66.5,texts[randomIndex]);
break;
case 2:
run(112.5,texts[randomIndex]);
break;
case 3:
run(157.5,texts[randomIndex]);
break;
case 4:
run(338.5,texts[randomIndex]);
break;
case 5:
run(294.5,texts[randomIndex]);
break;
case 6:
run(247.5,texts[randomIndex]);
break;
case 7:
run(201.5,texts[randomIndex]);
break;
}
}
}
let timer=null;
function run(angle,text){
isFlag=false;
// 转动的最终圈数
let begin=0;
// 最小转动圈数
let basic=1400;
timer=setInterval(function(){
/*
转盘转动的圈数
此处乘以0.1 可以让转动的速度逐渐缓慢
*/
begin+=Math.ceil((basic+angle-begin)*0.1); if(begin>(basic+angle)){
isFlag=true;
clearInterval(timer); } // 设置转盘旋转圈数
wapper.style.transform="rotate("+begin+"deg)";
// 生成旋转圈数,可以让转盘缓慢停止; },50);
}
</script>
</body>
</html>

JS 转盘抽奖效果的更多相关文章

  1. 简单JS旋转实现转盘抽奖效果

    闲来没事,做了一个模拟转盘抽奖的HTML&JS的效果: 可以在设置的时候,选择几个区域,并且可以填写指针将要停止的区域 比如,我选择了"区域2",结果就是这样 具体可以见下 ...

  2. js转盘抽奖

    这个是很简易的转盘,只用了html,css,js 通过css产生一个转盘上的指针,用js动态改变css中的transparent改变指针的角度.再添加一个背景图片类似于奖项的转盘 <!DOCTY ...

  3. 原生js轮盘抽奖实例分析(幸运大转盘抽奖)

    效果图: 所需图片素材: 这张图是pointer.png的位置的. turntable-bg.jpg这张是转盘背景图,在背景位置. 这张是turntable.png位置的. 需要这三张图片,如果要实现 ...

  4. C#保留2位小数几种场景总结 游标遍历所有数据库循环执行修改数据库的sql命令 原生js轮盘抽奖实例分析(幸运大转盘抽奖) javascript中的typeof和类型判断

    C#保留2位小数几种场景总结   场景1: C#保留2位小数,.ToString("f2")确实可以,但是如果这个数字本来就小数点后面三位比如1.253,那么转化之后就会变成1.2 ...

  5. web:转盘抽奖

    移动web:转盘抽奖(幸运大转盘)   为了获取客户.回馈客户,平台一般会推出抽奖活动类的营销页.因此web页面中,有各式各样的抽奖效果. 格子式(九宫格),背景滚动式(数字/文字/图案),旋转式(转 ...

  6. 移动web:转盘抽奖(幸运大转盘)

    为了获取客户.回馈客户,平台一般会推出抽奖活动类的营销页.因此web页面中,有各式各样的抽奖效果. 格子式(九宫格),背景滚动式(数字/文字/图案),旋转式(转盘),游戏式(砸蛋/拼图...).... ...

  7. 原生JS实现简易转盘抽奖

    我爱撸码,撸码使我感到快乐. 大家好,我是Counter. 本章带大家来简单的了解下原生JS实现转盘抽奖. 因为主要涉及到JS,在这里HTML和CSS起到的功能就没有那么重要, 因此,没有过多的阐述H ...

  8. 【Vue.js游戏机实战】- Vue.js实现大转盘抽奖总结

    大家好!先上图看看本次案例的整体效果. 实现思路: Vue component实现大转盘组件,可以嵌套到任意要使用的页面. css3 transform控制大转盘抽奖过程的动画效果. 抽奖组件内使用钩 ...

  9. js实现转盘抽奖

    大转盘抽奖,主要通过css3的"transform:rotate(0deg)"属性来控制元素的旋转角度来实现. 通常,抽奖的过程需要渐进的效果,所以直接通过旋转属性写比较繁琐. 这 ...

  10. js转盘大抽奖 自定义概率

    公司项目搞优惠活动,让做一个转盘抽奖的活动,转盘抽奖让他转起来 按照概率停止其实都麻烦,但是概率如果设置在前端就会很大的安全漏洞,所以无论为了安全性还是后期的维护问题都要把概率写到后台配置里然后读取配 ...

随机推荐

  1. vue3的defineAsyncComponent是如何实现异步组件的呢?

    前言 在上一篇 给我5分钟,保证教会你在vue3中动态加载远程组件文章中,我们通过defineAsyncComponent实现了动态加载远程组件.这篇文章我们将通过debug源码的方式来带你搞清楚de ...

  2. 再升级!MoneyPrinterPlus集成GPT_SoVITS

    最近有很多优秀的语音合成TTS工具,目前MoneyPrinterPlus已经集成了ChatTTS和fasterWhisper.应朋友们的要求,最近MoneyPrinterPlus也集成了GPT_SoV ...

  3. C语言之父和Linux之父谁更伟大?

    前言 在计算机软件领域,做出过重大贡献的神人很多,比如:<计算机程序设计艺术>(The Art of Computer Programming)一书的作者- Donald Knuth:Pa ...

  4. Win32 插入符光标跟随的打字小程序

    1.先创建插入符光标 在WM_CREATE消息中 LRESULT OnCreate(HWND hWnd, WPARAM wParam, LPARAM lParam) { HDC hdc = GetDC ...

  5. 能否自定义一个String类使用

    先说下结论,可以自定义包名不为java.lang的String类,区别包名是可以正常使用的. 包名不为java.lang package com.seven.jvm; public final cla ...

  6. .NET 8 + Vue 3 极简 RABC 权限管理系统

    前言 在日常工作中,几乎每家公司都需要一个后台管理系统来处理各种任务.为了帮助大家快速搭建这样一个系统,给大家介绍一个基于最新技术 .NET 8 和前端框架 Vue 3 实现的极简 RABC(基于角色 ...

  7. Qt 设置快捷键

    Qt设置快捷键 本文仅供本人知识总结使用,所以内容会比较浅显,不喜勿喷. 文章目录 Qt设置快捷键 一.需要的类 QShortcut 函数: 二.设置快捷键 官方文档原文翻译: 我的理解: 一.需要的 ...

  8. SSM + Freemarker 开发框架快速搭建

    1.项目骨架建立 一.使用开发工具IDEA,构建Maven项目,然后调整Maven项目结构,使其成为一个标准的web项目: 此处不选择Maven骨架,直接Next: 输入项目的相关信息,直接Finis ...

  9. Navicat16 安装破解教程

    Navicat16 安装破解教程 Navicat 16.1 什么是Navicat? 官网下载Navicat 注册包的使用 Navicat 16.1 在文章最后添加工作号 回复关键词获取注册机 什么是N ...

  10. docker高级篇第三章-dockerfile案例之制作自己的centos镜像

    在上一篇文章中<Dockerfile介绍及常用保留指令>,我们介绍了Dockerfile是什么以及Dockerfile常用的保留字段.熟悉了这些之后,有没有想自己动手写一个Dockerfi ...