jQuery九宫格跑马灯抽奖(已知结果)

2023-11-09

描述:
写两个抽奖,等级不同,找到一个原生写法的,原作者链接如下:

参考(

https://www.cnblogs.com/yangqing22/p/14065754.html

略改了一下,换成了jQuery方式

优化点:在抽奖过程中,禁止重复点击抽奖按钮,写了一个空弹窗禁止切换两个tab,抽奖结束后放开

效果:

html:
 

    <div class="draw_box">
        <ul class="draw_tab">
            <li class="cursorNeed nav_on" onclick="tabBoxNav(this,1)">普通</li>
            <li class="cursorNeed" onclick="tabBoxNav(this,2)">高级</li>
        </ul>
        <table id="tb0" class="drawContent drawContent1">
            <tr>
                <td>
                    <p class="draw_giftName">礼物1</p>
                </td>
                <td>
                    <p class="draw_giftName">礼物2</p>
                </td>
                <td>
                    <p class="draw_giftName">礼物3</p>
                </td>
            </tr>
            <tr>
                <td>
                    <p class="draw_giftName">礼物4</p>
                </td>
                <td class="startBtn startAfter" onclick="StartGame(0)">开始</td>
                <td>
                    <p class="draw_giftName">礼物5</p>
                </td>
            </tr>
            <tr>
                <td>
                    <p class="draw_giftName">礼物6</p>
                </td>
                <td>
                    <p class="draw_giftName">礼物7</p>
                </td>
                <td>
                    <p class="draw_giftName">礼物8</p>
                </td>
            </tr>
        </table> 
        <table id="tb1" class="drawContent drawContent2 hide">
            <tr>
                <td>
                    <p class="draw_giftName">礼物11</p>
                </td>
                <td>
                    <p class="draw_giftName">礼物22</p>
                </td>
                <td>
                    <p class="draw_giftName">礼物33</p>
                </td>
            </tr>
            <tr>
                <td>
                    <p class="draw_giftName">礼物44</p>
                </td>
                <td class="startBtn startAfter" onclick="StartGame(1)">开始</td></td>
                <td>
                    <p class="draw_giftName">礼物55</p>
                </td>
            </tr>
            <tr>
                <td>
                    <p class="draw_giftName">礼物66</p>
                </td>
                <td>
                    <p class="draw_giftName">礼物77</p>
                </td>
                <td>
                    <p class="draw_giftName">礼物88</p>
                </td>
            </tr>
        </table> 
    </div>
<!-- 抽奖弹窗普通 -->
<div class = "popup_con hide" id = "draw_MainCon0">
    <div class = "draw_popup_main1">
        <div class="draw_popup_div">
            <p class = "draw_popup_name" id="draw_popup_name0"></p>
            <p class = "draw_popup_btn" onclick="$('#draw_MainCon0').hide();StartGame(0)">再抽一次</p>
        </div>
    </div>
</div>
<!-- 抽奖弹窗高级 -->
<div class = "popup_con hide" id = "draw_MainCon1">
    <div class = "draw_popup_main1">
        <div class = "draw_popup_div">
            <p class = "draw_popup_name" id="draw_popup_name1"></p>
            <p class = "draw_popup_btn" onclick="$('#draw_MainCon1').hide();StartGame(1)">再抽一次</p>
        </div>
    </div>
</div>
<!-- 空的弹窗 -->
<div class = "popup_con2 hide" id="blank_pop"></div>

js:
弹窗可以点击其他地方关闭,可以直接再抽一次
通过已知结果的id,找到其对应的td位置

//切换
function tabBoxNav(x,type){
    $(x).addClass("nav_on").siblings().removeClass("nav_on");
    if(type == 2){
        $('#tb1').show().siblings('#tb0').hide();
    }else{
        $('#tb0').show().siblings('#tb1').hide();
    }
}
// 点击其他区域关闭弹窗
$(document).click(function(e){
    var _con = $('.draw_popup_div');   // 设置目标区域</span>
    if(!_con.is(e.target) && _con.has(e.target).length === 0){ // Mark 1\
        $("#draw_MainCon0,#draw_MainCon1").hide();
    }
});
// 抽奖部分
var index = 0, //当前亮区位置
    prevIndex = 0, //前一位置
    Speed = 150, //初始速度
    Time, //定义对象
    arr = GetSide(3, 3), //初始化数组   并获得礼物位置索引
    EndIndex = 0, //决定在哪一格变慢
    cycle = 0, //转动圈数
    EndCycle = 0, //计算圈数
    flag = false, //结束转动标志
    quick = 0; //加速
var endChecked = 0;  //结束在哪个
var drawFlag = false;

var drawGift = {};
var indexBox = 0;//抽的是哪个等级
function StartGame(type) {
    indexBox = type;
    if (drawFlag == false) {
        cycle = 0;
        flag = false;//转动结束
        EndCycle = 1;
        drawFlag = true;
        // 接口请求到 抽中礼物数据
        var  data = {
                "msg": {
                    "giftId": 3,
                  },
                "code": 1
        }
        var code = data.code;//1--领取成功
        drawGift = {};
        if(code == 1){
            $("#blank_pop").show();
            endChecked = funcGetDrawNum(data.msg.giftId);//取礼物位置
            Time = setInterval(Star, Speed);
            drawGift = data.msg;
            //刷新
        }else{
            tankuang(data.msg);
            drawFlag = false
        }
    }
}
function Star() {
    //跑马灯变速
    if(flag == false) {
        //走4格开始加速
        if(quick == 4) {
            clearInterval(Time);
            Speed = 50;
            Time = setInterval(Star, Speed);
        }
        // ajax 确定中奖项
        // endChecked = 0//0-7
        EndIndex = Math.floor(Math.random()*5);
        //跑N圈减速
        // console.log(cycle+'---'+EndCycle)
        //最少跑两圈 不能停的太快 等不到后台返回值
        if(cycle>2 && index == endChecked+1) {
            clearInterval(Time);
            Speed = 250;
            flag = true; //触发结束
            Time = setInterval(Star, Speed);
        }
    }
    if(index >= arr.length) {
        index = 0;
        cycle++;
    }
    //结束转动并选中号码
    if(flag == true && index == endChecked) {
        quick = 0;
        clearInterval(Time);
        setTimeout(function () {
            $("#blank_pop").hide();
            console.log("结束了,出结果")
            drawFlag = false;
            $("#draw_popup_name" + indexBox).html("抽到礼物下标" + endChecked);
            $("#draw_MainCon" + indexBox).show();
            // 展示结果弹窗
        }, 900)
    }
    $("#tb" + indexBox).find("tr").eq(arr[index][0]).find("td").eq(arr[index][1]).attr("class","act")
    if(index > 0)
        prevIndex = index - 1;
    else {
        prevIndex = arr.length - 1;
    }
    $("#tb" + indexBox).find("tr").eq(arr[prevIndex][0]).find("td").eq(arr[prevIndex][1]).attr("class","")
    index++;
    quick++;
}
// 获取抽奖盘礼物位置
function funcGetDrawNum(giftId){
    switch(giftId){
        case 1: case 11:
            return 0;
            break;
        case 2: case 22:
            return 1;
            break;
        case 3: case 33:
            return 2;
            break;
        case 4: case 44:
            return 3;
            break;
        case 5: case 55:
            return 4;
            break;
        case 6: case 66:
            return 5;
            break;
        case 7: case 77:
            return 6;
            break;
        case 8: case 88:
            return 7;
            break;
        default:
            return 0;
            break;
    }
}
//跑马灯 数组列表
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;
}



css:

/* 抽奖部分 */
.hide{display:none}
.draw_main{width:689px;height: 719px;margin: 0 auto;position: relative;}
.draw_tab{width: 100%;height: 66px;background: #fffab1;}
.draw_tab li{width: 50%;float: left;height:66px;font-size:32px;color:#613eb3;line-height:70px;text-align:center;}
.draw_tab li.nav_on{color:#804b32;}

.drawContent{width: 523px;height: 522px;margin:10px auto;}
.drawContent td{width: 170px;height: 170px;background:#5726ff;position: relative;}
.drawContent tr:nth-child(1) td:nth-child(3){background:#7500d8;position: relative;}
.drawContent td.act::after{content: "";display: block;width: 170px;height: 170px;position: absolute;top: 1px;left: 1px;background:#46a8f9;opacity: 0.8;}
.drawContent td.startBtn{background:#e4e7fe;line-height: 170px;text-align: center;font-size: 50px;}
.drawContent td.startAfter{background:#8741e8;}
.drawContent2 td.startBtn{background:#fffab1;}
.drawContent2 td.startAfter{background:#ffd88d;}

.draw_giftName{height: 0.6rem;text-align: center;color: #fff;font-size: 0.2rem;}
/* 抽奖弹窗 */
.popup_con {position: fixed;width: 100%;height: 100%;z-index: 999;margin: auto;left: 0;top: 0;bottom: 0;right: 0;background: rgba(0,0,0,0.5);}
.draw_popup_main1{width: 500px;height: 150px;background:#fff;position: fixed;left: 50%;top: 50%;transform: translate(-50%,-50%);}
.draw_popup_name{color: #7500d8;font-size: 30px;text-align: center;line-height: 60px;}
.draw_popup_btn{width: 216px;height: 40px;line-height: 40px;text-align: center; margin: 0 auto;background:#fffab1;}
/* 空弹窗 */
.popup_con2 {position: fixed;width: 100%;height: 100%;z-index: 999;margin: auto;left: 0;top: 0;bottom: 0;right: 0;}

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

jQuery九宫格跑马灯抽奖(已知结果) 的相关文章

随机推荐

  • 关于antd table组件中,数据渲染条数跟后台传入数据不一致的问题

    如果出现表格数据渲染 跟后台传过来的数据的条数不一致的情况 绝大概率的rowkey的问题 我这边当时调试的时候 后台的数据我是存在store中的 包括在table重新渲染的时候 我这边传过来的数据条数都是跟后台的保持一致的 但是渲染的时候
  • solver_factory.hpp:76] Check failed: registry.count(type) == 1 (0 vs. 1) Unknown solver type: SGD

    问题描述 本人遇到这个问题的环境 Ubuntu16 CUDA8 Caffe Matlab2015b 具体环境安装可见个人博客 在编译matlab版本caffe时遇到 安装正常 编译caffe正常 编译matcaffe正常 测试matcaff
  • 拒绝数据裸奔,进行3DES加密很重要!(Java,JavaScript)

    一 前言 对于3DES加密百度上大部分都有很详细的解释这里就不再赘述 本文只针对Java以及JavaScript进行使用3DES加密的过程进行详细的解答 并对容易采坑以及容易疑惑的地方进行详细解释 注意点 1 3DES加密key 必须为24
  • yoloe 超过yolox和yolov5

    号称超过yolox和yolov5的PP YoLoE 开源地址 GitHub PaddlePaddle PaddleDetection Object Detection toolkit based on PaddlePaddle It sup
  • jquery validation engine ajax,jquery ajax validation engine not working

    my jquery validation form is not validate here is the code like document ready function frm validationEngine validate HD
  • 在vscode中的js文件中自动补全html标签

    code 首选项 settings 查找settings json 然后在json文件中加入 emmet includeLanguages javascript html
  • 汉德笔试,感觉有些难的手机密码的动态规划题

    汉德公司的笔试编程题有两个 一个很简单 另一个感觉是加分题 当场没做出来后来做出来了 1 充电桩 N个电桩 第一个输入为ele数组 就是能充多少电 第二个输入为耗电数组 到下一站费多少电 要求输出为从任意一个充电桩进入 能跑一圈 则输出这个
  • C double转char字符串

    找个double转char字符串的代码 国内搜出来的都是些什么狗屎 翻墙出去 一搜就有几种不错的方法 方法1 使用sprintf https cboard cprogramming com c programming 38507 doubl
  • android里用Paint画圆环的时候,让圆环的笔头头部变圆

    DrawArc画圆环的时候 如果设置width过大 那么直角的笔头会画得很丑 这个时候使用以下这句就行了 Piant setStrokeCap Cap ROUND
  • xinput1_3.dll缺失了如何去修复?xinput1_3.dll解决方法分享

    缺失了xinput1 3 dll文件 对应用程序或游戏的正常运行造成了严重的影响 这个动态链接库文件 DLL 是由Microsoft Corporation开发的 它是一个重要的Windows系统文件 提供了针对Xbox 360控制器的输入
  • eclipse error: * could not be resolved

    转自 http lihaichuan blog 51cto com 498079 1060466 打开Eclipse后 编辑c c 编译时出错 could not be resolved 但运行结果正确 解决办法 在eclipse上 pro
  • Nginx实战(四) 限速功能

    本文转载至 http blog csdn net u012486840 article details 52787275 如果很多用户 同一时刻下载nginx服务器上面的资源 这样会对nginx服务器的I O产生极大负担 所以对nginx服
  • 备份文件下载

    一 备份文件下载 1 网站源码 开启题目 点开链接后 进入环境 可以看到常见网站源码备份文件的后缀和备份文件名 打开burp暴力破解flag 设置打开代理 开始抓包 2 bak文件 开启bak题目 点开链接 进入环境 出现这个界面 打开文件
  • flask url 构建

    from flask import Flask redirect url for import time app Flask name app route def hello world return hello world app rou
  • Qt QTableWidget设置表头背景色不成功的原因

    QTableWidget没有设置背景色的函数 通过Qss样式来设置背景色 m pTable gt horizontalHeader gt setStyleSheet QHeaderView section background color
  • Java8的新特性以及使用

    1 通过10个示例来初步认识Java8中的lambda表达式 我个人对Java 8发布非常激动 尤其是lambda表达式和流API 越来越多的了解它们 我能写出更干净的代码 虽然一开始并不是这样 第一次看到用lambda表达式写出来的Jav
  • 缺陷检测方法 halcon

    文章预览 前言 1 缺陷检测分类 1 1 标准缺陷检测 1 2 非标缺陷检测 针对行业特性 2 行业难点 3 常规缺陷检测算法 Halcon 3 1 差分法 3 1 1 blob分析 差分 3 1 2 模板匹配 差分 3 1 3 两种检测方
  • 前端实现在线预览pdf、word、xls、ppt等文件

    前端实现在线预览pdf word xls ppt等文件 PDF文档在线预览功能 方式一 通过a标签href属性实现 pdf文件理论上可以在浏览器直接打开预览但是需要打开新页面 在仅仅是预览pdf文件且UI要求不高的情况下可以直接通过a标签h
  • windows 环境下安装Tomcat

    环境 windows 7 64位 java jdk 11 0 1 官网下载jdk tomcat9版本链接地址 https tomcat apache org download 90 cgi 因为我的电脑是win7 64位的 所以选择红色框出
  • jQuery九宫格跑马灯抽奖(已知结果)

    描述 写两个抽奖 等级不同 找到一个原生写法的 原作者链接如下 参考 https www cnblogs com yangqing22 p 14065754 html 略改了一下 换成了jQuery方式 优化点 在抽奖过程中 禁止重复点击抽