html抽奖效果制作图

先上代码:
css:
布局根据实际情况来

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;//转盘的经过点总数 
this.$lotBtn = $(".lot-btn");
this.$lotFirst = $(".index-0");
this.isRunning = false;
this.paramRoll = {
    moveTime: null,//初始时间

    moveTimeAdd: null,//加速度
    round: null,//转的圈数
    lastPos: null,//随机停止位置

    curRound: null,//初始化当前圈数
    counter: null//计数器
};

 }
    MyRoll.prototype = {
constructor: MyRoll,
BeginLot: function(){
    this.$lotBtn.on("click",function(){
        if(!isLogin()){return false;}
        if(!selfRoll.isRunning){
            selfRoll.isRunning = true;      //重置下抽奖状态
            selfRoll.sendRollAjax.call(this);    //发送ajax请求
        }
   });
},
sendRollAjax: function(){
        $.ajax({
            url: "/service/hdplatform/"+hdIndex+"/doRoll",
            type: "POST",
            dataType:"json",
            maskId: this,
            data: { lotteryId: _lotteryId},
            success:function(rsp){
                init();//抽奖次数
                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;//转的圈数
    this.paramRoll.lastPos = Math.floor(Math.random()*7);

    this.paramRoll.curRound = 1;//初始化当前圈数
    this.paramRoll.counter = 0;//计数器
    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 ){
   //对注释代码的优化---通过增加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();//执行抽奖完成后的回调函数
     },
    myDialog: function(){
    dialog.showMsgBox(selfRoll.desc);
     }
    }
   new MyRoll().BeginLot();

将抽奖效果分为各个阶段:
beginLot: 点击按钮的时候,如果不是正在抽奖 !isRunning为true,即允许抽奖;否则,允许抽奖,并且设置其为isRunning为true.
sendRollAjax: 设置发送ajax请求,当知道请求结果后,开始转动抽奖盘。
beforeRoll: 转动转盘的时候需要初始化第一个位置样式和转动的速度
rolling:递归函数调用,每一次设置下一个位置的样式,并判断该位置是不是到达终点了,如果不是,则调用自己
nextState: 下一个位置的样式设置
finishHandler: 执行完抽奖后,设置初始样式,并且设置为可以抽奖,isRunning为false;
myDialog: 最后抽奖的结果弹出个窗口。
注意:此抽奖只是模拟抽奖转动,最终结果以弹出的信息框为准。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,837评论 6 496
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,551评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,417评论 0 350
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,448评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,524评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,554评论 1 293
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,569评论 3 414
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,316评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,766评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,077评论 2 330
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,240评论 1 343
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,912评论 5 338
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,560评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,176评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,425评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,114评论 2 366
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,114评论 2 352

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,647评论 18 139
  • 点击查看原文 Web SDK 开发手册 SDK 概述 网易云信 SDK 为 Web 应用提供一个完善的 IM 系统...
    layjoy阅读 13,743评论 0 15
  • 问答题47 /72 常见浏览器兼容性问题与解决方案? 参考答案 (1)浏览器兼容问题一:不同浏览器的标签默认的外补...
    _Yfling阅读 13,747评论 1 92
  • 《裕语言》速成开发手册3.0 官方用户交流:iApp开发交流(1) 239547050iApp开发交流(2) 10...
    叶染柒丶阅读 26,477评论 5 19
  • 「上班·谈写作」有奖征集:老板,到我办公室来一下 我是你的领导,有一阵子你背地里称我为老大,之后不只你,我的其他下...
    大力稳重阅读 1,996评论 31 80