zoukankan      html  css  js  c++  java
  • 一个跑马灯式的抽奖(转盘)活动

    先看下效果:

    由于写javascript和jquery的代码不多,加之活动时间要求比较紧,就在网络上寻找了下相关效果,大概是这样的:

    引用自:www.cnblogs.com/caism/archive/2011/10/12/2208738.html

    效果:http://www.csrcode.cn/html/txdm/qtdm/3876.htm

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
        <title>js抽奖</title>
        <style type="text/css">
            td{width:50px;height:50px;border:3px solid #ccc;text-align:center;vertical-align:middle}
        </style>
    </head>
    <body>
    <table id="tb">
    <tr>
        <td>1</td><td>2</td><td>3</td><td>4</td><td>5</td>
    </tr>
    <tr>
        <td>16</td><td></td><td></td><td></td><td>6</td>
    </tr>
    <tr>
        <td>15</td><td></td><td></td><td></td><td>7</td>
    </tr>
    <tr>
        <td>14</td><td></td><td></td><td></td><td>8</td>
    </tr>
    <tr>
        <td>13</td><td>12</td><td>11</td><td>10</td><td>9</td>
    </tr>
    </table>
    <p></p>
    请输入1-16其中一位整数,代表要停止的位置<input id="txtnum" value="12" type="text" /><input type="button" value="开始" onclick="StartGame()" />
        <script type="text/javascript">
        
         /*
          * 删除左右两端的空格
          */
         function Trim(str){
             return str.replace(/(^s*)|(s*$)/g, "");
         }
        
            /*
             * 定义数组
             */
            function GetSide(m,n){
                //初始化数组
                var arr = [];
                for(var i=0;i<m;i++){
                    arr.push([]);
                    for(var j=0;j<n;j++){
                        arr[i][j]=i*n+j;
                    }
                }
                //获取数组最外圈
                var resultArr=[];
                var tempX=0,
                 tempY=0,
                 direction="Along",
                 count=0;
                while(tempX>=0 && tempX<n && tempY>=0 && tempY<m && count<m*n)
                {
                    count++;
                    resultArr.push([tempY,tempX]);
                    if(direction=="Along"){
                        if(tempX==n-1)
                            tempY++;
                        else
                            tempX++;
                        if(tempX==n-1&&tempY==m-1)
                            direction="Inverse"
                    }
                    else{
                        if(tempX==0)
                            tempY--;
                        else
                            tempX--;
                        if(tempX==0&&tempY==0)
                            break;
                    }
                }
                return resultArr;
            }
           
            var index=0,           //当前亮区位置
           prevIndex=0,          //前一位置
           Speed=300,           //初始速度
           Time,            //定义对象
           arr = GetSide(5,5),         //初始化数组
             EndIndex=0,           //决定在哪一格变慢
             tb = document.getElementById("tb"),     //获取tb对象 
             cycle=0,           //转动圈数   
             EndCycle=0,           //计算圈数
            flag=false,           //结束转动标志 
            quick=0;           //加速
            
           
            function StartGame(){
             cycle=0;
             flag=false;
             EndIndex=Math.floor(Math.random()*16);
             //EndCycle=Math.floor(Math.random()*4);
            EndCycle=1;
             Time = setInterval(Star,Speed);
            }
           
            function Star(num){
                //跑马灯变速
                if(flag==false){
                  //走五格开始加速
                 if(quick==5){
                     clearInterval(Time);
                     Speed=50;
                     Time=setInterval(Star,Speed);
                 }
                 //跑N圈减速
                 if(cycle==EndCycle+1 && index==EndIndex){
                  clearInterval(Time);
                     Speed=300;
                     flag=true;         //触发结束
                     Time=setInterval(Star,Speed);
                 }
                }
               
                if(index>=arr.length){
                    index=0;
                    cycle++;
                }
               
               //结束转动并选中号码
             if(flag==true && index==parseInt(Trim(document.getElementById("txtnum").value))-1){ 
              quick=0;
              clearInterval(Time);
                }
             
                tb.rows[arr[index][0]].cells[arr[index][1]].style.border="3px solid red";
                if(index>0)
                    prevIndex=index-1;
                else{
                    prevIndex=arr.length-1;
                }
                tb.rows[arr[prevIndex][0]].cells[arr[prevIndex][1]].style.border="3px solid #ccc";
                index++;
                quick++;
               
            }
            /*
            window.onload=function(){
                Time = setInterval(Star,Speed);
            }
            */
        </script>
    </body>
    </html>

    由于上面的代码是前端控制中奖奖项,我通过ajax从后端获取奖项并记录数据。于是改了下js代码。虽然简单,写点代码备注下:

    <script type="text/javascript">
         
         /*
          * 删除左右两端的空格
          */
         function Trim(str){
             return str.replace(/(^s*)|(s*$)/g, ""); 
         }
         
            /*
             * 定义数组
             */
            function GetSide(m,n){
                //初始化数组
                var arr = [];
                for(var i=0;i<m;i++){
                    arr.push([]);
                    for(var j=0;j<n;j++){
                        arr[i][j]=i*n+j;
                    }
                }
                //获取数组最外圈
                var resultArr=[];
                var tempX=0,
                 tempY=0,
                 direction="Along",
                 count=0;
                while(tempX>=0 && tempX<n && tempY>=0 && tempY<m && count<m*n)
                {
                    count++;
                    resultArr.push([tempY,tempX]);
                    if(direction=="Along"){
                        if(tempX==n-1)
                            tempY++;
                        else
                            tempX++;
                        if(tempX==n-1&&tempY==m-1)
                            direction="Inverse"
                    }
                    else{
                        if(tempX==0)
                            tempY--;
                        else
                            tempX--;
                        if(tempX==0&&tempY==0)
                            break;
                    }
                }
                return resultArr;
            }
            
            var index=0,           //当前亮区位置
            prevIndex=0,          //前一位置
            Speed=300,           //初始速度
            Time,            //定义对象
            arr = GetSide(3,4),         //初始化数组
            EndIndex=0,           //决定在哪一格变慢
            tb = document.getElementById("tb"),     //获取tb对象 
            cycle=0,           //转动圈数   
            EndCycle=0,           //计算圈数
            flag=false,           //结束转动标志 
            quick=0;           //加速
            btn = document.getElementById("btn1")
            
            hit_info;   //中奖名称
            function StartGame(){
                clearInterval(Time);
                 cycle=0;
                 flag=false;
                 //EndCycle=2;
                 EndCycle=Math.floor(Math.random()*2+2);
                $.ajax({     
                    url:'index.php?act=huodong_2015yurenjie&op=getdata&lottery_id=1', 
                    type:'post', 
                    //data:'hash="<?php echo $output['hash'];?>"&sid=<?php echo session_id();?>',
                    data:{
                        'hash' : '<?php echo $output['hash'];?>',
                        'sid' : '<?php echo session_id();?>'
                    },
                   // cache:false,    
                    dataType:'json',
                    async : false, //默认为true 异步     
                    error:function(){     
                       alert('获取失败,请稍后重试');     
                    },     
                    success:function(data){     
                       //alert(data);
                       if(data['error']==1){
                            alert(data['message']);
                       }else{
                         info=data['data'];
                         EndIndex=info['hit_pos'];
                         hit_info=info['hit_info'];
                         Time = setInterval(Star,Speed);
                       }
                      
                    }  
                });  
    
               
                // alert(EndIndex);
                 
             
            }
            
            function Star(num){
                //跑马灯变速
                if(flag==false){
                    //走五格开始加速
                    if(quick==5){
                        clearInterval(Time);
                        Speed=50;
                        Time=setInterval(Star,Speed);
                    }
                    //跑N圈减速
                    if(cycle==EndCycle+1 && index==parseInt(EndIndex)){
                        //alert(parseInt(EndIndex));
                        clearInterval(Time);
                        Speed=300;
                        flag=true;       //触发结束    
                        Time=setInterval(Star,Speed);
                    }
                }
                
                if(index>=arr.length){
                    index=0;
                    cycle++;
                }
                
               //结束转动并选中号码
             //trim里改成数字就可以减速,变成Endindex的话就没有减速效果了
             //if(flag==true && index==parseInt(Trim('5'))-1){ 
                if(flag==true && index==EndIndex-1){ 
                     quick=0;
                     clearInterval(Time);
                }
                tb.rows[arr[index][0]].cells[arr[index][1]].className="playcurr";
                if(index>0)
                    prevIndex=index-1;
                else{
                    prevIndex=arr.length-1;
                }
                tb.rows[arr[prevIndex][0]].cells[arr[prevIndex][1]].className="playnormal";
                index++;
                quick++;
                if(flag==true && index==EndIndex){ 
                     var parent=document.getElementById("hit_list");
                      var childNode=document.createElement('li');
                     childNode.innerHTML=<?php echo $_SESSION['member_mobile']?>+" "+hit_info['prize_name'];
                     parent.insertBefore(childNode,parent.childNodes[0]);
                     alert("恭喜你获得第"+EndIndex+"号奖品:"+hit_info['prize_name']);
                }
            }
              
        </script>
  • 相关阅读:
    招聘里常见的沟通能力到底是什么
    C++服务器linux开发环境管理
    网络游戏通信协议双向迭代加密
    win10控制台程序printf死锁问题
    手游系统逻辑档案之通信协议
    STL插入删除和查询测试
    MATLAB复制图片时边框大的问题
    2019网易笔试题C++--丰收
    暴力求解最长公共子串
    顺时针打印矩阵
  • 原文地址:https://www.cnblogs.com/ikodota/p/4385904.html
Copyright © 2011-2022 走看看