html+css+js实现带有转盘的抽奖小程序

简介: html+css+js实现带有转盘的抽奖小程序

html+css+js实现带有转盘的抽奖小程序

简介:html+css+js实现带有转盘的抽奖小程序。

效果展示

抽奖方式:

飞镖

飞镖制作成飞机的模样,没人的号码用黄色标签做成云朵模样黏贴在背景板上,年会背景板缓缓移动,飞扎中的名字得奖寓意飞黄腾达。

福利彩票机

年会入场嘉宾人手一张自制。

可以哒云抽奖

创建抽奖活动后,扫描活动二维码,推广二维码,最后在拿出手机抽奖。

转盘抽奖

数字,转动三次构成一组百位数,号码对应者获奖。随着号码的逐一产生,现场配合音响效果能创造出激动人心的效果。

摘红包

把个人的电话号码写于纸上放在红包里,年会上领导随机摘取一个,然后打电话给获奖人。悬念十足,气氛紧张。

捞金

由年会上领导在箱子里放入一定数额的大额人民币,其余人用一元的纸币写上自己的名字或号码,放多少个人而定,放越多机会越多。(主持强调,付出越多收获越大)领导抽出中奖人再从准备好的三个信封抽出一个,三个信封内为:一只手,两只指,一双筷子等,然后自行捞取现金。最后被抽中的人所有奖金都归他。

藏宝图

具有设计感的小纸粘在杯碟椅子等地方上,在开party前,一张藏宝图分2份对开的,上边写着礼品号码,礼分2份的就是个号码有2分的,其中一分是真的,一分是假的,当他们找好藏宝图后必然要找另一半藏宝图才可以对奖的,在找藏宝图时就可以互动作用了,不过号码里的礼品一定要放点好玩的东西的(奶瓶,尿不湿)也放点大奖的啦,当同一张小纸合起来,就可以上换奖了,也可以拿了藏宝图的一对人交换藏宝图的,那时就会出很多笑话了。例如有人的藏宝图只找到半张纸时,他可能会看领导的杯杯碟碟的。强调团队合作的重要性。

本文采取的是转盘抽奖:

实现代码

index.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <link href="./style.css" type="text/css" rel="stylesheet">
</head>
<style>
</style>
<body>
<!-- 首先通过分析观察可以知道这是一个双层次结构,
所以需要的是div嵌套结构 -->
<div class="outher">
    <div class="wapper">
        <div class="left">
            <!-- 一边4个选项 -->
                <div class="one"> <span class="text"></span></div>
                <div class="two"> <span class="text"></span></div>
                <div class="three"> <span class="text"></span></div>
                <div class="four"> <span class="text"></span></div>
        </div>
        <div class="right">
            <div class="one"> <span class="text"></span></div>
            <div class="two"> <span class="text"></span></div>
            <div class="three"> <span class="text"></span></div>
            <div class="four"> <span class="text"></span></div>
        </div>
      </div>
      <!-- 图形中间的文字 -->
      <div class="circle">
             抽奖
     </div>
</div>
<script src="style.js"></script>
</body>
</html>

style.css

*{
    margin:0;
    padding:0;
}
body{
    /* 让div盒子放到屏幕中间 */
    display: flex;
    justify-content: center;
    align-items: center;
    height: 100vh;
}
.outher{
    width:300px;
    height: 300px;
    position: relative;
    border-radius: 50%;
}
.wapper{
    width:300px;
    height: 300px;
    border-radius: 50%;
    overflow: hidden;
    background-color: black;
    transform:rotate(22.5deg);
 }
 .left{
     position: absolute;
     width: 150px;
     height: 300px;
     left:0;
     overflow: hidden;
 }
 .left .text{
     position: absolute;
     top:30px;
     left:55%;
     transform:rotate(-22.5deg);
     text-align: center;
 }
 .right .text{
     position: absolute;
     top:25px;
     left:11%;
     transform:rotate(22.5deg);
     text-align: center;
 }
 .right{
     position: absolute;
     width: 150px;
     height: 300px;
     right:0;
     overflow: hidden;
     text-align: center;
 }
 .left div{
   position: absolute;
   top:0;
   left:0;
   width: 100%;
   height: 100%;
   transform-origin: right center;
}
.left div.one{
   background-color: #FC7C7B;
}
.left div.two{
   background-color: #F59462;
   transform:rotate(-45deg);
}
.left div.three{
   background-color: #FC7C7B;
   transform:rotate(-90deg);
}
.left div.four{
   background-color: #F59462;
   transform:rotate(-135deg);
} 
.right div{
   position: absolute;
   top:0;
   left:0;
   width: 100%;
   height: 100%;
   transform-origin: left center;
}
.right div.one{
   background-color: #FC7C7B;
}
.right div.two{
   background-color: #F59462;;
   transform:rotate(45deg);
}
.right div.three{
   background-color: #FC7C7B;;
   transform:rotate(90deg);
}
.right div.four{
   background-color: #fff;
   transform:rotate(135deg);
} 
.circle{
   width: 100px;
   height: 100px;
   background-color:#f2552e ;
   position: absolute;
   left:50%;
   top:50%;
   transform:translate(-50%,-50%);
   border-radius: 50%;
   text-align: center;
   line-height: 100px;
   font-size: 30px;
   font-weight: bold;
   cursor: pointer;
   user-select: none;
}
.circle:after{
    width: 0;
    height: 0;
    border:40px solid #f2552e ;;
    border-left-width: 10px;
    border-right-width: 10px;
    position: absolute;
    content:"";
    border-left-color: transparent;
    border-top-color: transparent;
    border-right-color: transparent;
    top:-70px;
    left:calc(50% - 10px);
    z-index: -1;
}

style.js

let wapper = document.querySelector(".wapper");
    let textAll = document.querySelectorAll(".wapper .text");
    // 这里是奖项的名字
    let prize = ["1号大奖","2号大奖","3号大奖","4号大奖","5号大奖","6号大奖","7号大奖","未中奖"];
    // 权重数组 不同奖项的权重值,权重越高越容易中这个区域
    let prizeWeight = [1,3,5,7,10,15,20,30];
    //  权重之和
    let weightSum = prizeWeight.reduce(function(prevValue,curVal){
        return prevValue + curVal;
    });
    for(let i = 0 ; i < textAll.length ; i++){
            textAll[i].innerHTML = prize[i];  
    }
    let isFlag = true;
        document.querySelector(".circle").onclick=function(){
            console.log(123);
        if(isFlag){
        // 生成权重随机数 生成数的范围是【1,30】
        // 这里需要注意的是,这个30要和最上面的prizeWeight的最后一个值对应
        let weightRandom = parseInt(Math.random()*30);
        // 合并
        let concatAfterArr = prizeWeight.concat(weightRandom);
        // 排序
        let  sortedWeightArr  = concatAfterArr.sort(function(a,b){ return a-b });
        // randomIndex是奖项的索引 结果是【1,7】
        var randomIndex = sortedWeightArr.indexOf(weightRandom); 
        randomIndex = Math.min(randomIndex, prize.length -1); 
            // 获奖的内容
            let text = prize[randomIndex];
            switch(randomIndex){
                case 0:
                    run(22.5,text);
                    break;
                case 1:
                    run(66.5,text);
                    break;
                case 2:
                    run(112.5,text); 
                    break;
                case 3:
                    run(157.5,text);
                    break;
                case 4:
                    run(338.5,text);
                    break;
                case 5:
                    run(294.5,text);
                    break;   
                case 6:
                    run(247.5,text);
                    break;
                case 7:
                    run(201.5,text);
                    break;    
            }
        }
    };
    function run(angle,text){
    isFlag = false;
    let begin = 0; 
    let timer = null;
    let basic = 1800;
    timer = setInterval(function(){
        if(begin > (basic+angle)){
            isFlag = true;
            clearInterval(timer);
        }
        wapper.style.transform="rotate("+(begin)+"deg)";
        // 这是一个算法 可以出现转盘又很快到慢慢变慢的效果
        begin+=Math.ceil(basic+angle-begin)*0.1;
    },70);
}

如果大家觉得有用的话,可以关注我下面的微信公众号,极客李华,我会在里面更新更多行业资讯,企业面试内容,编程资源,如何写出可以让大厂面试官眼前一亮的简历,让大家更好学习编程,我的抖音,B站也叫极客李华。

相关文章
|
存储 前端开发 JavaScript
仿真银行app下载安装, 银行卡虚拟余额制作app,用html+css+js实现逼真娱乐工具
这是一个简单的银行账户模拟器项目,用于学习前端开发基础。用户可进行存款、取款操作,所有数据存储于浏览器内存中
|
人工智能 程序员 UED
【01】完成新年倒计时页面-蛇年新年快乐倒计时领取礼物放烟花html代码优雅草科技央千澈写采用html5+div+CSS+JavaScript-优雅草卓伊凡-做一条关于新年的代码分享给你们-为了C站的分拼一下子
【01】完成新年倒计时页面-蛇年新年快乐倒计时领取礼物放烟花html代码优雅草科技央千澈写采用html5+div+CSS+JavaScript-优雅草卓伊凡-做一条关于新年的代码分享给你们-为了C站的分拼一下子
1056 21
【01】完成新年倒计时页面-蛇年新年快乐倒计时领取礼物放烟花html代码优雅草科技央千澈写采用html5+div+CSS+JavaScript-优雅草卓伊凡-做一条关于新年的代码分享给你们-为了C站的分拼一下子
|
前端开发 JavaScript
【02】v1.0.1更新增加倒计时完成后的放烟花页面-优化播放器-优化结构目录-蛇年新年快乐倒计时领取礼物放烟花html代码优雅草科技央千澈写采用html5+div+CSS+JavaScript-优雅草卓伊凡-做一条关于新年的代码分享给你们-为了C站的分拼一下子
【02】v1.0.1更新增加倒计时完成后的放烟花页面-优化播放器-优化结构目录-蛇年新年快乐倒计时领取礼物放烟花html代码优雅草科技央千澈写采用html5+div+CSS+JavaScript-优雅草卓伊凡-做一条关于新年的代码分享给你们-为了C站的分拼一下子
979 14
【02】v1.0.1更新增加倒计时完成后的放烟花页面-优化播放器-优化结构目录-蛇年新年快乐倒计时领取礼物放烟花html代码优雅草科技央千澈写采用html5+div+CSS+JavaScript-优雅草卓伊凡-做一条关于新年的代码分享给你们-为了C站的分拼一下子
css3 svg制作404页面动画效果HTML源码
css3 svg制作404页面动画效果HTML源码
350 34
|
前端开发
【2025优雅草开源计划进行中01】-针对web前端开发初学者使用-优雅草科技官网-纯静态页面html+css+JavaScript可直接下载使用-开源-首页为优雅草吴银满工程师原创-优雅草卓伊凡发布
【2025优雅草开源计划进行中01】-针对web前端开发初学者使用-优雅草科技官网-纯静态页面html+css+JavaScript可直接下载使用-开源-首页为优雅草吴银满工程师原创-优雅草卓伊凡发布
1331 1
【2025优雅草开源计划进行中01】-针对web前端开发初学者使用-优雅草科技官网-纯静态页面html+css+JavaScript可直接下载使用-开源-首页为优雅草吴银满工程师原创-优雅草卓伊凡发布
html+js+css实现的建筑方块立体数字时钟源码
html+js+css实现的建筑方块立体数字时钟源码
760 33
|
JavaScript
jQuery+HTML5实现的微信大转盘抽奖源码
这是一款基于jQuery+HTML5实现的微信大转盘抽奖效果源码,是一款可配置奖品抽奖的jQuery大转盘抽奖代码,可实现点击按钮转轮旋转实现抽奖功能,效果逼真自然,代码里面有详细的注释,可以修改文字或者二次开发都可以
518 11
|
移动开发 HTML5
HTML5实现的手机验证抽奖领券效果源码
这是一款基于HTML5实现的手机验证抽奖领券效果源码。在输入框输入手机号码即可点击下方的按钮来进行抽奖游戏,中奖后还会弹出提示信息,是一款比较经典的抽奖游戏源码
463 9
|
前端开发
“弘五四,耀青春”程序创意获奖作品【html+css】
本作品以“青春筑梦,共创未来”为主题,采用动态龙元素展现青春活力与创新精神。页面设计简洁明快,色彩协调,突显年轻人积极向上的风貌。作品内容包括获奖截图、名字《时代扬新帆》及源代码分享。特别说明:禁止用于商业活动,可用于比赛和作业等开源场景。最后,作者表达了对五四精神的致敬与传承,强调了青春活力和创造力的重要性,并感谢评委和支持者。 **获奖感言摘录:** “获得这个奖项,对我们团队来说,既是认可也是激励。我们将继续努力,不断优化产品,为用户带来更好的体验,为社会贡献更多价值。”
449 2
|
小程序 前端开发 Java
SpringBoot+uniapp+uview打造H5+小程序+APP入门学习的聊天小项目
JavaDog Chat v1.0.0 是一款基于 SpringBoot、MybatisPlus 和 uniapp 的简易聊天软件,兼容 H5、小程序和 APP,提供丰富的注释和简洁代码,适合初学者。主要功能包括登录注册、消息发送、好友管理及群组交流。
566 1
SpringBoot+uniapp+uview打造H5+小程序+APP入门学习的聊天小项目

热门文章

最新文章