精华内容
下载资源
问答
  • 本篇文章主要介绍了原生JS实现九宫格抽奖效果的示例代码。具有很好的参考价值。下面跟着小编一起来看下吧
  • 主要为大家详细介绍了原生JS九宫格抽奖,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
  • 主要介绍了php+lottery.js制作九宫格抽奖实例,本文通过实例代码给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
  • 一款基于vue.js实现九宫格抽奖代码,界面UI很精美。参数设置在lottery.js文件里修改,注释很详细。
  • js实现九宫格抽奖

    2020-10-15 12:08:08
    主要为大家详细介绍了js实现九宫格抽奖,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
  • 原生js 实现九宫格抽奖功能

    千次阅读 2021-01-08 11:45:55
    1.先绘制一个九宫格轮盘 <div class="bodydom"> <div class="block">鸿蒙紫气*1</div> <div class="block">现金百万*1</div> <div class="block">复活戒指*1</div> &...

    1.先绘制一个九宫格轮盘

    <div class="bodydom">
          <div class="block">鸿蒙紫气*1</div>
          <div class="block">现金百万*1</div>
          <div class="block">复活戒指*1</div>
          <div class="block">谢谢参与</div>
          <div class="block5 block">
    			<div>
    				<div>开始抽奖</div>
    				<div class='frequency'>剩余<span id='numbers'>3</span></div>
    			</div>
    		</div>
          <div class="block">九阳真经*1</div>
          <div class="block">宇宙战舰*1</div>
          <div class="block">世界树*1</div>
          <div class="block">神秘大奖</div>	
    </div>
    <div id='prize' style='prize'></div>
    

    2.添加css

    <style>
           .bodydom {
               width: 600px;
               height: 600px;
               border: 1px solid;
               display: flex;
               flex-wrap: wrap;
    			background-color: #F56C6C;
    			border-radius: 10px;
           }
    
           .block {
               width: 25%;
               height: 25%;
               border: 1px solid black;
              text-align: center;
               font-size: 20px;
    			margin: 4%;
    			display: flex;
    			align-items: center;
    			justify-content: center;
    			border-radius: 10px;
    			background-color: pink;
           }
    
           .block5 {
               background-color: #409EFF;
               cursor: pointer;
           }
    		.frequency{
    			font-size:15px
    		}
    		.prize{
    			font-size: 25px;
    			margin-top: 10px;
    		}
       </style>
    

    3.最重要的js代码

    <script>
            let blocks = document.getElementsByClassName("block");
            let list = [0, 1, 2, 5, 8, 7, 6, 3], i = 0, count = 0, stopTimer;  //list存放数组的下标,i为下标值,默认从下标为0的开始,也就是左上角的高档洋房一套,count用于判断是否与随机数相等每次加一
            let randomn = Math.floor(Math.random() * 8 + 50); // 创建随机数随机数 
            let timing = function () {
                // 将其他盒子都变为粉色
                for (let j = 0; j < list.length; j++) {
                    blocks[list[j]].style.background = "pink";
                }
    			blocks[list[i]].style.background = "white";
    			i++; 
    			// 重制i的值
    			if (i === list.length) {
    			    i = 0;
    			}
                //randomn的值最大为58,最小为50
                count++; // 根据count的值调整速度
                // 下面的4个if根据count的值来关闭计时器和重启计时器 改变计时器的时间间隔
                if (count === 5 || count === 45) {
                    clearInterval(stopTimer);
                    stopTimer = setInterval(timing, 200);
                }
                if (count === 10 || count === 35) {
                    clearInterval(stopTimer);
                    stopTimer = setInterval(timing, 100);
                }
                if (count === 15) {
                    clearInterval(stopTimer);
                    stopTimer = setInterval(timing, 50);
                }
                // 当等于上面的随机数时,停止计时器
                if (count === randomn) {
                    clearInterval(stopTimer);
    				var tips=blocks[list[i-1]].innerText
    				if(i-1!=6){
    					document.getElementById("prize").innerHTML='恭喜您获得'+tips
    				}else{
    					document.getElementById("prize").innerHTML='不要灰心,再接再厉!'
    				}
    				count = 0  //重置count 的值
    				 let randomn = Math.floor(Math.random() * 8 + 50); // 重新获取随机数
    				 blocks[4].addEventListener("click", start);//重新绑定点击事件
                }
    			
            }
            // 点击开始按钮后 点击后执行 timing 
            let start = function () {
                blocks[4].removeEventListener("click", start); // 当点击了开始按钮后 移除点击事件 防止用户重复点击
    			var numbers=document.getElementById("numbers").innerHTML
    			if(numbers==0){
    				alert('抱歉,您没有抽奖次数!')
    			}else{
    				numbers--
    				document.getElementById("numbers").innerHTML=numbers
    				stopTimer = setInterval(timing, 300);
    			}
    			console.log(numbers)
                
            }
            blocks[4].addEventListener("click", start);  //下标为4的绑定点击事件,也就是开始抽奖
        </script>
    

    效果图
    九宫格抽奖
    问题:以上代码用随机数控制的,不能自己控制自己想要抽到的东西,简单的改一下就行了

    喜欢的话,欢迎交流哦

    展开全文
  • 原生js实现九宫格抽奖

    千次阅读 2019-12-23 09:52:51
    预览效果 完整代码 留意注释文字的解释。记得更换图片。 <!DOCTYPE html> ...meta name="viewport" content="width=device-width, initial-scale=1.0">...JavaScript 实现九宫格抽奖</title> ...

    预览效果

    在这里插入图片描述

    完整代码

    留意注释文字的解释。记得更换图片。

    <!DOCTYPE html>
    <html>
    <head>
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>JavaScript 实现九宫格抽奖</title>
    <style>
        body{
            background-color: #2c9afc;
        }
        #container {
            width: 330px;
            height: 340px;
            margin: 10% auto;
            border: 7px solid #99d4ff;
            border-radius: 10px;
            padding: 2%;
        }
        #list {
            width: 330px;
            height: 340px;
            list-style: none;
            margin: 0;
            padding: 0;
        }
        #list li,
        #list span {
            width: 100px;
            height: 100px;
            float: left;
            text-align: center;
            line-height: 100px;
            position: relative;
            background-color: #384f9a;
            margin: 1.4%;
            border-radius: 5px;
        }
        #list li img{
            display: block;
            width: 100%;
            height: 100%;
        }
        #list li .mask{
            width: 100%;
            height: 100%;
            position: absolute;
            left:0;
            top:0;
            background: url(images/mask.png) no-repeat;
            background-size: cover;
            display: none;
        }
        #list span:hover {
            cursor: pointer;
            color: orange;
            font-size: 18px;
        }
        #list .active .mask{
            display: block;
        }
        #message {
            line-height: 32px;
            color: #9a9a9a;
            text-align: center;
            position:absolute;
            left: 50%;
            top: 50px;
            width: 300px;
            height: 50px;
            margin-left: -150px;
            display: none;
            background: #000;
            color: #fff;
        }
    </style>
    </head>
    <body>            
        <h3 style="text-align:center;margin-top: 10%;color:white">JavaScript 实现九宫格抽奖</h3>
        <div id="container">
            <ul id="list">
                <!-- img标签放奖品图片 -->
                <!-- mask类为抽奖滚动起来的标记 -->
                <li><img src="images/1.png"/><div class="mask"></div></li>
                <li><img src="images/2.png"/><div class="mask"></div></li>
                <li><img src="images/3.png"/><div class="mask"></div></li>
                <li><img src="images/4.png"/><div class="mask"></div></li>
                <span id="startbutton" onclick="startlottery()" style="background-color:#ff3a59;color:white;font-size: 20px;">开始抽奖</span>
                <li><img src="images/5.png"/><div class="mask"></div></li>
                <li><img src="images/6.png"/><div class="mask"></div></li>
                <li><img src="images/7.png"/><div class="mask"></div></li>
                <li><img src="images/8.png"/><div class="mask"></div></li>
            </ul>
            <div id="message"></div><!-- 获奖信息展示 -->
        </div>
    </body>
    
    <script type="text/javascript">
    
        var container = document.getElementById('container'),
            li = container.getElementsByTagName('li'),
            span = document.getElementById('startbutton'),
            message = document.getElementById('message'),
            timer = null;
            bReady = true;//定义一个抽奖开关
    
        var prize = [0,1,2,4,7,6,5,3];//奖品li标签滚动的顺序
    
        var num = 0;//num用来存放得到的随机函数,也就是抽中的奖品
    
        //开始抽奖
        function startlottery(){
            if(bReady) {//当抽奖开关为true的时候,可点击抽奖
                message.style.display="none";//将获奖信息div隐藏(以防止上次抽奖信息还显示)
                span.style.background="#ada7a8";
                bReady = false;//抽奖开关设为false 处于抽奖中 即不能点击抽奖
                num = getrandomnum(1,9)//得到一个随机数(即奖品)
                // console.log(num)
                startinit(num);//执行抽奖初始化
            }
        }
    
    
        //抽中的奖品 返回1-9的整数,包含1,不包含9
        function getrandomnum(n, m) {
            return parseInt((m - n) * Math.random() + n);
        }
    
    
        //抽奖初始化
        function startinit(num) {
            var i = 0;  //定义一个i 用来计算抽奖跑动的总次数
            var t =200;  //抽奖跑动的速度 初始为200毫秒
            var rounds = 5;  //抽奖转动的圈数
            var rNum = rounds*8;  //标记跑动的次数(这是一个条件判断分界线)
            timer = setTimeout(startscroll, t);//每t毫秒执行startscroll函数
    
    
            //抽奖滚动的函数
            function startscroll() {
    
                //每次滚动抽奖将所有li的class都设为空
                for(var j = 0; j < li.length; j++) {
                    li[j].className = '';
                }
    
                var prizenum = prize[i%li.length];  //通过i余8得到此刻在prize数组中的数字,该数字就是mask标记出现的位置
                li[prizenum].className = "active";
                i++;
    
                if(i<rNum-8){  //当i小于转(rNum-8次)的数量,t不变还是200毫秒
                    timer = setTimeout(startscroll, t);//继续执行抽奖滚动
                }else if(i>= rNum-8 && i< rNum+num){
                    //t时间变长,此时计时器运行速度降低,同时标签刷新速度也降低
                    t+=(i-rNum+8)*5;
                    timer = setTimeout(startscroll, t);//继续执行抽奖滚动
                }
                if( i >= rNum+num){//当i大于转rNum加随机数字num次计时器结束,出现提示框提示中奖信息
    
                    if (num==1) {
                       message.innerHTML="恭喜你中了耳机";
                    }else if(num==2){
                       message.innerHTML="恭喜你中了iPad";
                    }else if(num==3){
                       message.innerHTML="感谢参与";
                    }else if(num==4){
                       message.innerHTML="恭喜你中了洋娃娃";
                    }else if(num==5){
                       message.innerHTML="恭喜你中了红色鞋子";
                    }else if(num==6){
                       message.innerHTML="恭喜你中了白色手机";
                    }else if(num==7){
                       message.innerHTML="恭喜你中了黑色手机";
                    }else if(num==8){
                       message.innerHTML="恭喜你中了蓝色鞋子";
                    }
    
                    var timer2 = null;
                    timer2 = setTimeout(function(){
                        message.style.display="block";//奖品展示的信息为显示状态
                        span.style.background="#ff3a59";
                        clearTimeout(timer2);
                    },1000);
                    bReady = true;//当计时器结束后让span标签变为抽奖状态
                    clearTimeout(timer);
                }
    
            }
        }
    
    </script>
    </html>
    

    代码分析

    1. prize
    var prize = [0,1,2,4,7,6,5,3];//奖品li标签滚动的顺序
    

    数组prize中的数字就是li标签对应的索引值,由于是九宫格抽奖,因此抽奖滚动的顺序并不是按li标签的索引顺序,以下是li标签实际滚动的顺序图分析:
    在这里插入图片描述

    1. getrandomnum(1,9)
    //抽中的奖品 返回1-9的整数,包含1,不包含9
    function getrandomnum(n, m) {
        return parseInt((m - n) * Math.random() + n);
    }
    

    因为只有8个奖品,所以得到的随机整数不包含9

    1. 变量 i、rounds、rNum
    //抽中的奖品 返回1-9的整数,包含1,不包含9
     var i = 0;  //定义一个i 用来计算抽奖跑动的总次数
     var rounds = 5;  //抽奖转动的圈数
     var rNum = rounds*8;  //标记跑动的次数(这是一个条件判断分界线)
    

    i 是用来计算li标签滚动的次数,滚动一次加1;
    rounds 及 rNum 用来让滚动抽奖变慢及停止的判断条件;

    1. prizenum
    //抽中的奖品 返回1-9的整数,包含1,不包含9
      var prizenum = prize[i%li.length];  //通过i余8得到此刻在prize数组中的数字,该数字就是mask标记出现的位置
      li[prizenum].className = "active";
    

    i%li.length 为i除以li标签长度得到的余数(始终为0-7范围的整数),放进prize数组中,得到的prizenum数字就是当前滚动到的li标签索引值

    本文来源于微信GitWeb的文章
    展开全文
  • 一款简单的vue.js手机移动端九宫格抽奖页面代码,适用于抽奖活动,奖品可以修改换成自己的。
  • 前后端分离,后端为java,(固定中奖概率和变化的概率俩种模式,设定有抽奖次数,预留有关键字(这个比较敏感大家懂的),前端图片可以更换自己想要的图片
  • H5+JS九宫格抽奖

    2018-12-07 09:37:20
    简单实用的H5+JS九宫格抽奖,也可后台交互,动态改变奖品配置
  • JS: //定义一个定时器的句柄 var interval = null; //定义点击开始以后,定时器执行的时间间隔 var inTime = 100; //获取1-8的div var divNum = document.getElementsByClassName('num'); //把获取到的...

    首先我们来看一下效果:

    说明:在这个案例中,停止位置的输入范围是0-7,代表8个停止位置(顺时针排列),然后我们后台设置的中奖位置是1。

    8个停止位置的分布图:

    0      1(中奖位置)   2

    7                                 3

    6              5                 4

    下面是相关的代码,相信详细的注释能够帮助你理解!!!

    HTML:

    <div id="box">
        <div id="header">
          <span>停止位置:</span>
          <input type="text" value="0" id="txt">
        </div>
        <div id="comment"><span>输入值的范围:0-7,默认停止位置:0</span></div>
        <div id="main">
          <div class="num"><img src="./xingyun.jpg" alt=""></div>
          <div class="num"><img src="./xingyun.jpg" alt=""></div>
          <div class="num"><img src="./xingyun.jpg" alt=""></div>
          <div class="num"><img src="./xingyun.jpg" alt=""></div>
          <div class="num" id="mid"><input type="button" value="抽奖" id="start"></div>
          <div class="num"><img src="./xingyun.jpg" alt=""></div>
          <div class="num"><img src="./xingyun.jpg" alt=""></div>
          <div class="num"><img src="./xingyun.jpg" alt=""></div>
          <div class="num"><img src="./xingyun.jpg" alt=""></div>
        </div>
      </div>

    CSS:

     * {
          margin: 0;
          padding: 0;
        }
    
        html,
        body {
          width: 100%;
          height: 100%;
        }
    
        #box {
          width: 100%;
          height: 100%;
          background-color: silver;
        }
    
        #header {
          width: 600px;
          height: 70px;
          margin: 0 auto;
          text-align: center;
          padding-top: 30px;
          background-color: aquamarine;
          opacity: 0.65;
        }
    
        #header span {
          line-height: 35px;
          font-size: 35px;
          color: black;
        }
    
        #header input {
          height: 40px;
          font-size: 35px;
        }
        #comment{
          width: 600px;
          height: 50px;
          margin: 0 auto;
          color: black;
          background-color: aquamarine;
          opacity: 0.65;
          text-align: center;
          font-size: 30px;
        }
    
        #main {
          width: 600px;
          height: 600px;
          margin: 0 auto;
        }
    
        .num {
          width: 200px;
          height: 200px;
          float: left;
          opacity: 0.3;
        }
    
        img {
          width: 100%;
          height: 100%;
        }
    
        #mid {
          opacity: 0.7;
        }
    
        #mid input {
          width: 100%;
          height: 100%;
          background-color: red;
          font-size: 40px;
          color: aliceblue;
        }

    JS:

     //定义一个定时器的句柄
        var interval = null;
        //定义点击开始以后,定时器执行的时间间隔
        var inTime = 100;
        //获取1-8的div
        var divNum = document.getElementsByClassName('num');
        //把获取到的数组重新排序,因为得到的divNum长度为9,但是最中间的那个“开始”盒子不需要,而且divL里面的class对象顺序不符合要求
        var divList = [];
        for (let i = 0; i < 3; i++) {
          divList.push(divNum[i])
        }
        divList[3] = divNum[5];
        divList[4] = divNum[8];
        divList[5] = divNum[7];
        divList[6] = divNum[6]
        divList[7] = divNum[3];
    
        //自动转圈函数
        function animation() {
          var index = 0;
          interval = setInterval(function () {
            //divList[index].style.opacity = 1;注意,这句不能写在这里,因为在最后,index会等于8,但是divList数组最大下标为7
            if (index > 7) {
              index = 0;
              divList[7].style.opacity = 0.5;
            } else if (index != 0) {
              divList[index - 1].style.opacity = 0.5;
            }
            //给盒子的透明度设置为1
            divList[index].style.opacity = 1;
            index++;
          }, 1000)
        }
        //页面加载以后,先自动转圈
        window.onload = animation;
    
        //为盒子里面的“开始”按钮注册点击事件
        var inputStart = document.getElementById("start");
        var valTxt = document.getElementById("txt");
        inputStart.onclick = function () {
          //首先判断用户输入的停止位置的值是否合乎格式,默认的位置为0
          if (valTxt.value.length == 1 && parseInt(valTxt.value) >= 0 && parseInt(valTxt.value) <= 7) {
            //禁用按钮
            inputStart.disabled="disabled";
            inputStart.value = "抽奖中..."
            //取消页面加载以后设置的定时器(也就是取消自动转圈)
            clearInterval(interval);
            //先更改所有的盒子透明度
            for (let i = 0; i < divList.length; i++) {
              divList[i].style.opacity = 0.5;
            }
            //设置更快的定时器,时间间隔为inTime=0.1s
            var index = 0;
            interval = setInterval(function () {
              //divList[index].style.opacity = 1;注意,这句不能写在这里,因为在最后,index会等于8,但是divList数组最大下标为7
              if (index > 7) {
                index = 0;
                divList[7].style.opacity = 0.5;
              } else if (index != 0) {
                divList[index - 1].style.opacity = 0.5;
              }
              //给盒子的透明度设置为1
              divList[index].style.opacity = 1;
              index++;
            }, inTime)
            //快速转圈两秒以后,执行stop函数
            //思考一个问题?两秒以后,快速转圈还会继续转吗?
            //答案:会的,两秒后执行延时器里面的操作以后,还会继续执行定时器里面的操作
            setTimeout(function () {
              stop(parseInt(valTxt.value));
            }, 2000)
    
          } else {
            alert("尊敬的用户,请正确输入停止位置的值!");
          }
          //让转动停下来,接收的形参为停止位置的值
          function stop(luckPosition) {
            //清除定时器
            clearInterval(interval)
            //得到opacity为1的那个盒子的位置current
            var current = -1;
            for (let i = 0; i < divList.length; i++) {
              if (divList[i].style.opacity == 1) {
                current=i;
              }
            }
            //注意:current+1
            stopLuck(luckPosition,current+1,inTime,10)//inTime是点击“开始”以后,定时器执行的时间间隔,大小为100,也就是转圈的速度
          }
          //
          function stopLuck(luckPosition,index,time,stepTime) {
            //设置一个延时器,0.1s以后执行(传进来的time=100)
            //思考一个问题,为什么这里也需要设置一个延时器,而且最开始时候,延迟时间time为传进来的inTime=100?答案在下面的注释中!
            setTimeout(function () {
              //重置opacity
        //这里需要注意两个问题?
        //第一个问题:不明白为什么这里需要重置opacity,因为在“开始”按钮注册点击事件里面的定时器函数语句会重置opacity,这里再重置
            //是多此一举,其实这里重置opacity是为了在递归该函数时候,重置opacity
        //第二个问题:第一次执行stopLuck函数的时候(也就是stop最开始调用stopLuck函数的时候),index的值其实是
            //比opacity为1的那个盒子下标大1,因为传进来的是:current+1,所以认为下面这种重置opacity的写法会导致错误,但是重点来了!
            //这里是设置了一个延时器,并且第一次的延迟时间为time=inTime=0.1s,所以第一次执行stopLuck的时候,opacity为1的那个盒子其实
            //已经继续转动一次,所以第一次执行stopLuck函数时候,下面这种写法没有错
              if (index > 7) {
                index = 0;
                divList[7].style.opacity = 0.5;
                
              } else if (index != 0) {
                divList[index - 1].style.opacity = 0.5
              }
              // 当前位置选中状态
              divList[index].style.opacity  = 1;
              // 如果说当前旋转时间太短, 或者当前位置不等于停止位置, 递归一下,直到旋转至停止位置
              //(注意:第一次的延迟时间为time=inTime=0.1s)
              if (time < 400 || index != luckPosition) {
                //思考两个问题?
                //第一个问题,如果index == luckPosition的话,会怎么样?
        //因为time < 400,仍然也会执行这里,也就是说,即使当前位置等于停止位置也会执行这里,为了是使得速度先变慢。
        //然后index会再++直到time>=400并且index==luckPosition不再执行这里。
                //第二个问题,为什么越来越慢?
        //在最开始的时候,time=100,stepTime=10,index为当前opacity为1盒子的下标,所以执行到这里,递归一下。time值和
        //stepTime值变大,那么stopLuck()里面的延时器的延迟时间也会变长,从而使得转圈的速度变慢
        //同时index++,延时器里面重置opacity的代码会重置opacity,从而达到转圈的效果
                stepTime++;
                time += stepTime;
                index++;
                stopLuck(luckPosition, index, time, stepTime);
              } else {
                //执行到这里说明当前位置等于停止位置
                //设置一个延时器,为了使1s后显示结果
                setTimeout(function () {
        //这里我们后台手动设置中奖的位置是:1,也就是输入luckPosition的值为1时中奖,当然也可以设置中奖位置为负数,从而永远不中奖
                  if (luckPosition == 1 ) {
                    alert("恭喜中奖!")
                    //恢复按钮
                    inputStart.disabled=false;
                    inputStart.value = "抽奖";
                    animation();
                  } else {
                    alert("很遗憾,你没有中奖!")
                     //恢复按钮
                    inputStart.disabled=false;
                    inputStart.value = "抽奖";
                    animation();
                  }
                },1000)
    
              }
            },time)
          }
        }

     

     

    展开全文
  • 简洁轻量的抽奖插件,未压缩,源码清晰明了。自己纯手敲。
  •  前端九宫格是一种常见的抽奖方式,js实现如下,掌握其原理,不论多少宫格,都可以轻松应对。(代码可复制直接运行看效果)。  该案例以四宫格入门,可扩展多宫格,奖品模块的布局可自由设置。 <!DOCTYPE ...

    介绍:

      前端九宫格是一种常见的抽奖方式,js实现如下,掌握其原理,不论多少宫格,都可以轻松应对。(代码可复制直接运行看效果)。

      该案例以四宫格入门,可扩展多宫格,奖品模块的布局可自由设置。

    <!DOCTYPE html>
    <html lang="en">
    
    <head>
        <meta charset="UTF-8">
        <meta content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=no" name="viewport">
        <meta http-equiv="X-UA-Compatible" content="ie=edge">
        <title>四宫格抽奖</title>
    
    </head>
    
    	<style>
    		
    		html,body{
    			width: 100%;
    			height: 100%;
    			max-width: 750px;
    			margin: auto;
    		}
    		
    		.outBox{
    			width: 100%;
    			height: 60%;
    			background: gray;
    			position: relative;
    			display: flex;
    			flex-flow: row wrap;
    					
    		}
    		
    		.prize{
    			width: 44%;
    			height: 40%;
    			margin: 5% 3%;
    			text-align: center;
    			font-size: xx-large;
    			color: #fff;
    			padding-top: 15%;
    			box-sizing: border-box;
    			border: 6px double #AB945E;
    		}
    		
    		.prize.active{
    			background: goldenrod;
    		}
    		
    		.btn{
    			position: absolute;
    			left:30%;
    			bottom:-20%;
    			width: 40%;
    			text-align: center;
    			height: 12%;
    			font-size: xx-large;
    		}
    		
    		
    	</style>
    
    
    
    <body>
    	
    	<div class="outBox" id="lotteryBoxs">
    		
    		<div class="prize prize-0 one">一等奖</div>
    		<div class="prize prize-1 two">二等奖</div>
    		<div class="prize prize-3 four">谢谢参与</div>
    		<div class="prize prize-2 three">三等奖</div>
    		
    		
    		<button class="btn">开启好运</button>
    	</div>
    
     
        
              
    </body>
    
    
    		<script src="http://code.jquery.com/jquery-2.2.4.min.js"></script>
    		<script>
    			
    			
    			
    					$(document).ready(function() {
    					    // 转盘的初定义
    					    var lottery = {
    					        index: 0, //当前转动到哪个位置,起点位置
    					        count: 0, //总共有多少个位置
    					        timer: 0, //setTimeout的ID,用clearTimeout清除
    					        speed: 10, //初始转动速度
    					        times: 0, //转动次数
    					        cycle: 30, //转动基本次数:即至少需要转动多少次再进入抽奖环节
    					        prize: 0, //中奖位置
    					        init: function(id) {
    					            if ($("#" + id).find(".prize").length > 0) {
    					                $lottery = $("#" + id);
    					                $units = $lottery.find(".prize");
    					                this.obj = $lottery;
    					                this.count = $units.length;
    					            }
    					        },
    					        roll: function() {
    					            var index = this.index;
    					            var count = this.count;
    					            var lottery = this.obj;
    					            $(lottery).find(".prize").removeClass("active");
    					            index += 1;
    					            if (index > count - 1) {
    					                index = 0;
    					            }
    					            $(lottery).find(".prize-" + this.index).addClass("active");
    					            this.index = index;
    					            return false;
    					        },
    					        stop: function(index) {
    					            this.prize = index;
    					            return false;
    					        }
    					    };
    					
    					    // 中奖转动事件
    					    function roll() {
    					        lottery.times += 1;
    					        lottery.roll();
    					        var prize_site = $("#lotteryBoxs").attr("prize_site");
    					        if (lottery.times > lottery.cycle + 10 && lottery.index == prize_site) {
    					            var prize_id = $("#lotteryBoxs").attr("prize_id");
    					            var prize_name = $("#lotteryBoxs").attr("prize_name");
    								console.log(prize_site+"结果")
    					            //中奖情况的判断--模态框
    					            if(prize_site == 1 || prize_site == 2 || prize_site == 3){
    					                //已中奖
    					                setTimeout(function(){
    					                    console.log("恭喜你获得" + prize_name)
    					                },500)
    					            }else{
    					                //未中奖
    					                setTimeout(function(){
    					                    console.log("中奖结果:" + prize_name)
    					                },500)
    					                
    					            }
    					
    					            clearTimeout(lottery.timer);
    					            lottery.prize = -1;
    					            lottery.times = 0;
    					            click = false;
    					
    					        } else {
    					            if (lottery.times < lottery.cycle) {
    					                lottery.speed -= 20;
    					            } else if (lottery.times == lottery.cycle) {
    					                var index = Math.random() * (lottery.count) | 0;
    					                lottery.prize = index;
    					            } else {
    					                if (lottery.times > lottery.cycle + 10 && ((lottery.prize == 0 && lottery.index == lottery.count - 1) || lottery.prize == lottery.index + 1)) {
    					                    lottery.speed += 90;
    					                } else {
    					                    lottery.speed += 30;
    					                }
    					            }
    					            if (lottery.speed < 30) {
    					                lottery.speed = 30;
    					            }
    					            lottery.timer = setTimeout(roll, lottery.speed);
    					        }
    					        return false;
    					    }
    					
    					    var click = false;
    					
    					    // 后台数据的调用
    					    $(function() {
    					        lottery.init('lotteryBoxs');
    					        $(".btn").click(function() {
    					            if (click) {
    					                return false;
    					            } else {
    					                lottery.speed = 100;
    					                
    					                //此处数据应该从接口获取
    					                var prizeArr=["谢谢参与","一等奖","二等奖","三等奖"]
    					                var prizeId = Math.floor(Math.random()*(3-0+1)+0);
    					                var prize_site = prizeId;
    					                console.log("位置"+prizeId);
    					                $("#lotteryBoxs").attr("prize_site", prize_site );
    					                $("#lotteryBoxs").attr("prize_name", prizeArr[prizeId]);
    					                roll();
    					                click = true;
    					                return false;
    					
    					            }
    					        });
    					    })
    					
    					});
    			
    			
    			
    		</script>
    		
    
    </html>
    

      页面效果如下:

      

     

    转载于:https://www.cnblogs.com/nanyang520/p/11046867.html

    展开全文
  • javaScript原生九宫格抽奖插件,适用于跳转性抽奖效果,具体抽奖数目和样式可自行设置 特点:原生插件,体积小 使用方法: var lottery=new Lottery({ prefix:"lottery-unit",//抽奖元素类名前缀 例如:class=...
  • js九宫格抽奖

    千次阅读 2017-11-22 17:44:25
    js简单实现九宫格,demo
  • 随机闪烁九宫格抽奖js特效代码,用padding实现高度自适应,百分比实现宽度自适应,整体九宫格适应屏幕,并随机获取标签和颜色,利用定时器实现开始和停止。
  • 九宫格抽奖

    2016-07-12 11:42:04
    最近做的一个九宫格抽奖的小游戏,参考了网上的实例,自己又重新写了一下,属于精简版。
  • 微信小程序 九宫格抽奖demo 需要自己改些细节
  • 基础CSS+JS练习,小白入门级。
  • JS 九宫格抽奖模板

    2016-06-01 16:02:28
    一个简单的九宫格抽奖的模板 一看就会 适合新人 学习 理解原理 老手见笑。
  • vue实现九宫格抽奖

    2021-08-27 14:25:41
    九宫格结构模板jscss九宫格配置-nineConfig 结构模板 <div class="nineSquare_wrap"> <div class="nine-box"> <template v-for="(nine,index) of nineConfig.nineSort"> <template v-if=...
  • vue.js九宫格抽奖代码是一款基于VUE框架自定义动态数据抽奖奖品,九宫格转盘抽奖效果。
  • vue.js手机九宫格抽奖代码是一款通用的拼手气抽大奖抵用券九宫格抽奖手机页面模板。
  • vue实现九宫格抽奖游戏

    千次阅读 2019-09-25 10:09:22
    isRunning: false, //是否正在抽奖 imageAward: [ { name: "亞菲兒香水", img: "http://demo.sc.chinaz.net/Files/DownLoad/webjs1/201903/jiaoben6617/images/zWardS_gift1.png" }, { name: "Gucci帽子", ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 571
精华内容 228
关键字:

js实现九宫格抽奖