html抽獎效果制作圖

先上代碼:
css:
布局根據(jù)實際情況來

html:

             <ul class="lot-ul">
                <li class="index-0"><p class="lp-font">1</p>   </li>
                <li class="index-1"><p class="lp-font">2</p></li>
                            <li class="index-2"><p class="lp-font">3</p></li>

                <li class="index-7"><p class="lp-font">8</p></li>
                <li class="lot-btn"><p class="lot-font">抽獎</p></li>
                <li class="index-3"><p class="lp-font">4</p></li>

                <li class="index-6"><p class="lp-font">5</p></li>
                <li class="index-5"><p class="lp-font">4</p></li>
                <li class="index-4"><p class="lp-font">3</p></li>
             </ul>

js:

  function MyRoll(){
   selfRoll = this;

this.desc = null;
this.point = 8;//轉(zhuǎn)盤的經(jīng)過點總數(shù) 
this.$lotBtn = $(".lot-btn");
this.$lotFirst = $(".index-0");
this.isRunning = false;
this.paramRoll = {
    moveTime: null,//初始時間

    moveTimeAdd: null,//加速度
    round: null,//轉(zhuǎn)的圈數(shù)
    lastPos: null,//隨機停止位置

    curRound: null,//初始化當(dāng)前圈數(shù)
    counter: null//計數(shù)器
};

 }
    MyRoll.prototype = {
constructor: MyRoll,
BeginLot: function(){
    this.$lotBtn.on("click",function(){
        if(!isLogin()){return false;}
        if(!selfRoll.isRunning){
            selfRoll.isRunning = true;      //重置下抽獎狀態(tài)
            selfRoll.sendRollAjax.call(this);    //發(fā)送ajax請求
        }
   });
},
sendRollAjax: function(){
        $.ajax({
            url: "/service/hdplatform/"+hdIndex+"/doRoll",
            type: "POST",
            dataType:"json",
            maskId: this,
            data: { lotteryId: _lotteryId},
            success:function(rsp){
                init();//抽獎次數(shù)
                if( rsp.result ){
                    selfRoll.desc = rsp.desc;
                    selfRoll.beforeRoll();
                }
                else{
                    selfRoll.isRunning = false;
                    dialog.showMsgBox(rsp.desc);
                }
            }
        });

 },
 beforeRoll: function( ){
    $(".index-0").addClass("lot-position");
    this.paramRoll.moveTime = 500;//初始時間
        
    this.paramRoll.moveTimeAdd = -40;//加速度
    this.paramRoll.round = 3;//轉(zhuǎn)的圈數(shù)
    this.paramRoll.lastPos = Math.floor(Math.random()*7);

    this.paramRoll.curRound = 1;//初始化當(dāng)前圈數(shù)
    this.paramRoll.counter = 0;//計數(shù)器
    setTimeout( this.rolling, this.paramRoll.moveTime );
             },
            rolling: function(){
    selfRoll.paramRoll.moveTime += selfRoll.paramRoll.moveTimeAdd;
    selfRoll.paramRoll.counter = 
            (selfRoll.paramRoll.counter+1) % selfRoll.point;

    selfRoll.nextState( selfRoll.paramRoll.counter );

    if( selfRoll.paramRoll.counter == selfRoll.paramRoll.lastPos ){
        if( selfRoll.paramRoll.curRound == selfRoll.paramRoll.round ){
            return selfRoll.finishHandler( selfRoll.paramRoll.lastPos , selfRoll.myDialog );
        }
        selfRoll.paramRoll.curRound = selfRoll.paramRoll.curRound+1;
    }

    setTimeout( selfRoll.rolling, selfRoll.paramRoll.moveTime );
        },
      nextState: function( _counter ){
   //對注釋代碼的優(yōu)化---通過增加8來避免為0情況的特殊處理
   var middle = _counter+selfRoll.point;
   $(".index-"+ (middle % selfRoll.point) ).addClass("lot-position");
   $(".index-"+ Number(middle-1) % selfRoll.point ).removeClass("lot-position");

   // if( _counter != 0 ){
   //     $(".index-"+_counter).addClass("lot-position");
   //     $(".index-"+Number(_counter-1) ).removeClass("lot-position");
   // }
   // else{
   //     $(".index-0").addClass("lot-position");
   //     $(".index-7").removeClass("lot-position");
   // }
      },
        finishHandler: function(_lastPos , _myCallBack){
    $(".index-"+_lastPos).removeClass("lot-position");
    this.isRunning = false;

    _myCallBack();//執(zhí)行抽獎完成后的回調(diào)函數(shù)
     },
    myDialog: function(){
    dialog.showMsgBox(selfRoll.desc);
     }
    }
   new MyRoll().BeginLot();

將抽獎效果分為各個階段:
beginLot: 點擊按鈕的時候禽车,如果不是正在抽獎 !isRunning為true,即允許抽獎许溅;否則,允許抽獎疚宇,并且設(shè)置其為isRunning為true.
sendRollAjax: 設(shè)置發(fā)送ajax請求扒最,當(dāng)知道請求結(jié)果后,開始轉(zhuǎn)動抽獎盤错维。
beforeRoll: 轉(zhuǎn)動轉(zhuǎn)盤的時候需要初始化第一個位置樣式和轉(zhuǎn)動的速度
rolling:遞歸函數(shù)調(diào)用奖地,每一次設(shè)置下一個位置的樣式,并判斷該位置是不是到達終點了赋焕,如果不是参歹,則調(diào)用自己
nextState: 下一個位置的樣式設(shè)置
finishHandler: 執(zhí)行完抽獎后,設(shè)置初始樣式隆判,并且設(shè)置為可以抽獎犬庇,isRunning為false;
myDialog: 最后抽獎的結(jié)果彈出個窗口。
注意:此抽獎只是模擬抽獎轉(zhuǎn)動侨嘀,最終結(jié)果以彈出的信息框為準(zhǔn)臭挽。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市咬腕,隨后出現(xiàn)的幾起案子欢峰,更是在濱河造成了極大的恐慌,老刑警劉巖涨共,帶你破解...
    沈念sama閱讀 219,539評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件纽帖,死亡現(xiàn)場離奇詭異,居然都是意外死亡举反,警方通過查閱死者的電腦和手機懊直,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,594評論 3 396
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來火鼻,“玉大人吹截,你說我怎么就攤上這事∧#” “怎么了波俄?”我有些...
    開封第一講書人閱讀 165,871評論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長蛾默。 經(jīng)常有香客問我懦铺,道長,這世上最難降的妖魔是什么支鸡? 我笑而不...
    開封第一講書人閱讀 58,963評論 1 295
  • 正文 為了忘掉前任冬念,我火速辦了婚禮趁窃,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘急前。我一直安慰自己醒陆,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,984評論 6 393
  • 文/花漫 我一把揭開白布裆针。 她就那樣靜靜地躺著刨摩,像睡著了一般。 火紅的嫁衣襯著肌膚如雪世吨。 梳的紋絲不亂的頭發(fā)上澡刹,一...
    開封第一講書人閱讀 51,763評論 1 307
  • 那天,我揣著相機與錄音耘婚,去河邊找鬼罢浇。 笑死,一個胖子當(dāng)著我的面吹牛沐祷,可吹牛的內(nèi)容都是我干的嚷闭。 我是一名探鬼主播,決...
    沈念sama閱讀 40,468評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼赖临,長吁一口氣:“原來是場噩夢啊……” “哼胞锰!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起思杯,我...
    開封第一講書人閱讀 39,357評論 0 276
  • 序言:老撾萬榮一對情侶失蹤胜蛉,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后色乾,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體誊册,經(jīng)...
    沈念sama閱讀 45,850評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,002評論 3 338
  • 正文 我和宋清朗相戀三年暖璧,在試婚紗的時候發(fā)現(xiàn)自己被綠了案怯。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,144評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡澎办,死狀恐怖嘲碱,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情局蚀,我是刑警寧澤麦锯,帶...
    沈念sama閱讀 35,823評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站琅绅,受9級特大地震影響扶欣,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,483評論 3 331
  • 文/蒙蒙 一料祠、第九天 我趴在偏房一處隱蔽的房頂上張望骆捧。 院中可真熱鬧,春花似錦髓绽、人聲如沸敛苇。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,026評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽枫攀。三九已至,卻和暖如春塘匣,著一層夾襖步出監(jiān)牢的瞬間脓豪,已是汗流浹背巷帝。 一陣腳步聲響...
    開封第一講書人閱讀 33,150評論 1 272
  • 我被黑心中介騙來泰國打工忌卤, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人楞泼。 一個月前我還...
    沈念sama閱讀 48,415評論 3 373
  • 正文 我出身青樓驰徊,卻偏偏與公主長得像,于是被迫代替她去往敵國和親堕阔。 傳聞我的和親對象是個殘疾皇子棍厂,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,092評論 2 355

推薦閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn)超陆,斷路器牺弹,智...
    卡卡羅2017閱讀 134,672評論 18 139
  • 點擊查看原文 Web SDK 開發(fā)手冊 SDK 概述 網(wǎng)易云信 SDK 為 Web 應(yīng)用提供一個完善的 IM 系統(tǒng)...
    layjoy閱讀 13,772評論 0 15
  • 問答題47 /72 常見瀏覽器兼容性問題與解決方案? 參考答案 (1)瀏覽器兼容問題一:不同瀏覽器的標(biāo)簽?zāi)J(rèn)的外補...
    _Yfling閱讀 13,754評論 1 92
  • 《裕語言》速成開發(fā)手冊3.0 官方用戶交流:iApp開發(fā)交流(1) 239547050iApp開發(fā)交流(2) 10...
    葉染柒丶閱讀 26,852評論 5 19
  • 「上班·談寫作」有獎?wù)骷豪习澹轿肄k公室來一下 我是你的領(lǐng)導(dǎo)谨娜,有一陣子你背地里稱我為老大航攒,之后不只你,我的其他下...
    大力穩(wěn)重閱讀 2,004評論 31 80