1. 程式人生 > >用jquary實現抽獎功能

用jquary實現抽獎功能

先把樣式用html加css寫出來

<!Doctype html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<script src="http://www.alixixi.com/script/jquery-1.8.3.min.js" type="text/javascript"></script>
<style type="text/css">
body,ul,li{
    margin:0;
    padding:0;
    border:0;//清除瀏覽器原始的8畫素
    list-style:none;//把ul,li的格式清除
    }
body{
    font-size:12px;
    font-family:Arial, Helvetica, sans-serif;//字型型別
    text-align:center; //字型居中
    margin:0 auto; 
    background:#efefef;
    }
.box{ 
    padding:9px 0 0 11px;
    width:759px; 
    height:611px; 
    background:#ccc; 
    margin:20px auto; 
    }
.inbox{ 
    width:751px; 
    height:596px;
    position:relative;//相對定位
    }
#random_box li{ 
    position:absolute; //絕對定位
    width:144px; 
    overflow:hidden; //超出的部分隱藏
    height:144px; 
    border:3px solid #c7c5ca; 
    background:#fff;
    }
#random_box li img{ 
    width:144px; 
    display:block; 
    height:144px;
    }
.ok{ 
    display:block; //行級元素變成塊級元素
    width:442px; 
    height:294px; 
    background:#c00; 
    color:#fff; 
    font-size:48px; 
    position:absolute; 
    top:150px; 
    left:150px; 
    cursor:pointer; //滑鼠放在上面是小手
    text-align:center; 
    line-height:280px;
    }
#random_1{ left:0; top:0;}
#random_2{ left:148px;top:0;}
#random_3{ left:296px;top:0;}
#random_4{ left:444px;top:0;}
#random_5{ left:592px;top:0; }
#random_6{ left:592px;top:148px;}
#random_7{ left:592px; top:298px;}
#random_8{ left:592px; top:446px;}
#random_9{ left:444px; top:446px;}
#random_10{ left:296px; top:446px;}
#random_11{ left:148px; top:446px;}
#random_12{ left:0; top:446px;}
#random_13{ left:0; top:298px;}
#random_14{ left:0; top:148px;}
#random_box li.random_current{border:2px solid red;}
</style>
</head>
<body>
<div class="box">
 <div class="inbox">
  <ul id="random_box">
   <li id="random_1"><img src="apple.jpg"></li>
   <li id="random_2"><img src="dell燃7000.jpg"></li>
   <li id="random_3"><img src="ipad2018.jpg"></li>
   <li id="random_4"><img src="oppo r17.jpg"></li>
   <li id="random_5"><img src="p20.jpg"></li>
   <li id="random_6"><img src="vivo nex星跡版.jpg"></li>
   <li id="random_7"><img src="華為nova3.jpg"></li>
   <li id="random_8"><img src="堅果r1.jpg"></li>
   <li id="random_9"><img src="外星人.jpg"></li>
   <li id="random_10"><img src="小米6.jpg"></li>
   <li id="random_11"><img src="小米6x.jpg"></li>
   <li id="random_12"><img src="小米8.jpg"></li>
   <li id="random_13"><img src="小米充電寶.jpg"></li>
   <li id="random_14"><img src="小米手環3.jpg"></li> 
  </ul>
  <b class="ok" onClick="StartGame()">抽獎</b>
 </div>
</div>
</body>
</html>

這是沒有插入圖片的效果圖
這需要的注意的是,使用jquary必須先匯入包,這裡可以是網上的,也可以是本地的,本地的就在src後吧路徑換了就行了。接下來就是寫jquary裡面的內容了

jquary程式碼

<script>
var index=1,           //當前亮區位置,就是獎轉到哪個位置
prevIndex=14,          //前一位置,記住當前亮區的前一個位置,消除前一個選中狀態
Speed=300,           //初始速度,在定時器中用到,多少毫秒執行當前函式
Time,            //定義物件
arr_length = 14; //GetSide(5,5)         //初始化陣列,此程式碼沒用到陣列,大致是陣列的意思,就是14個抽獎塊
EndIndex=1,           //決定在哪一格處變慢
cycle=0,           //轉動圈數
EndCycle=3,           //計算圈數
flag=false,           //結束轉動標誌
random_num=1,      //中獎數,
quick=0;           //加速
   //這裡是物件的定義,可以定義多個變數
var isClick = true;//消除重複點選事件
function StartGame(){
  if(isClick){
$("#random_box li").removeClass("random_current"); //取消選中,用jquary把亮的位置的樣式消除
   //random_num = parseInt($("#txtnum").val());
   random_num = Math.floor(Math.random()*14+1); //產出隨機中獎數1~14之間,這裡可以控制,如果不想讓那個獎選出來,(Math.random()是產生[0,1)的隨機數,永遠不會取到1。floor是向下取整)
   //console.log(random_num);
   index=1; //再來一次,從1開始
   cycle=0;
   flag=false;
   //EndIndex=Math.floor(Math.random()*12);
   if(random_num>5) {//產生隨機數(就是中獎數字)的前五個讓它速度變慢,最後停止
  EndIndex = random_num - 5; //前五格開始變慢
   } else {//這是一個圈,一共14個數,當前中獎數字位置的前五個數變慢
    EndIndex = random_num + 14 - 5; //前五格開始變慢
   }
   //EndCycle=Math.floor(Math.random()*3);
   Time = setInterval(Star,Speed);//設定定時器,讓star函式為speed毫秒執行一次
   isClick = false;//讓此標誌位變成false,防止重複點選事件,讓事件越來越快
   }
}
function Star(){
    //跑馬燈變速,開始,也就是沒有結束
    if(flag==false){
      //走五格開始加速
      if(quick==5){//走到第五格時開始加速
         clearInterval(Time);//清除上一個定時器
         Speed=50;
         Time=setInterval(Star,Speed);//毫秒數變快,速度加快
      }
      //跑n圈減速
      if(cycle==EndCycle+1 && index-1==EndIndex){//當全速等於cycle圈時,並且噹噹前亮區等於要減速的數時
      clearInterval(Time);//清除定時器
         Speed=300;
         flag=true;         //觸發結束
         Time=setInterval(Star,Speed);
      }
    }
    if(index>arr_length){//如果當前亮區跟咱們的獎品個數相同)(也就是14個品),那就從頭開始
        index=1;
        cycle++;
    }     
   //結束轉動,並選中號碼
   if(flag==true && index==parseInt(random_num)){ //當前轉到的數等於產生的隨機中獎數
      quick=0;
      clearInterval(Time);//清除定時器,此時抽獎停下
      isClick = true;//可以重新點選star,重新開始抽獎
   }
   $("#random_"+index).addClass('random_current'); //設定當前選中樣式
   //永遠將前一個樣式清掉
   if(index>1)
       prevIndex=index-1;
   else{
       prevIndex=arr_length;
   }
   $("#random_"+prevIndex).removeClass('random_current'); //取消上次選中樣式
   index++;
   quick++;    
}
</script>

在相應的位置插入圖片

在這裡插入圖片描述

清除重複點選事件bug

使用一個flag,在進行點選事件裡面的內容之前先判斷flag,當flag為true時執行以下程式碼。中間讓flag一直為flase。在停止轉動,這一次抽獎完畢時,讓flag為true。