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九宫格跑马灯抽奖(已知结果) 的相关文章

  • jQuery .append 不起作用

    我想在我的表单中插入一些东西 这些东西被硬编码到插件中 我不想弄乱插件文件 所以我发现 append 我写过类似的东西 据我所知它应该有效 Chrome 中的控制台没有显示任何错误 这是有什么问题吗 由于 wordpress 安全模式 我正
  • 在淘汰赛应用程序中使用 setInterval 进行轮询实现?

    我正在尝试使用 setInterval 实现简单的轮询机制 我有一个视图模型如下 define knockout jquery function ko function ViewModel var self this setInterval
  • 未捕获的类型错误:无法读取未定义的属性“toLowerCase”

    我收到此错误 它源自 jquery 框架 当我尝试加载准备好的文档上的选择列表时 出现此错误 我似乎无法找到为什么会出现此错误 它适用于更改事件 但在尝试手动执行该函数时出现错误 未捕获的类型错误 无法读取未定义的属性 toLowerCas
  • 在 javascript 中访问 ajax POST 响应

    我正在从 javascript 函数发出 ajax POST 请求 function UpdateMetrics ajax type POST url MyHandler ashx Param1 value1 data contentTyp
  • 使用 javascript 将 html 文本渲染为位图,无需服务器端代码

    我需要使用 javascript 代码来转换 html 中的文章 帖子 以便最终用户以位图的形式查看 有没有办法在没有服务器端代码的情况下做到这一点 example p testing text here p 您可以使用例如html2can
  • 如何在每个组件完成加载后在 Angular 2 中运行 jquery 函数

    我已经尝试了所有生命周期挂钩 但无法实现所需的结果 我需要的结果是触发一个函数 该函数在加载每个元素 组件 后初始化用于单个页面上不同元素的许多 jquery 插件 假设你有这个结构 主页 滑块 小部件 产品旋转器 ETC 这些元素中的每一
  • 使用 jQuery UI 日期选择器选择日历更改 URL

    我正在使用 jQuery UI 选择器 我想知道当有人选择日期时是否有可能 它会自动将他们重定向到 URL 如下所示 index php date 2013 10 15 这是我正在使用的插件 Date
  • 在 ASP.NET MVC 4 中使用 jQuery Mobile 1.3 面板时的双滚动条

    我无法弄清楚这一点 将以下代码放入布局页面并在浏览器中查看后 我将显示 2 个垂直滚动条 div div 遇到了类似的问题 并注意到只有在使用我的自定义主题时才出现这种问题 我以错误的顺序将自定义主题添加到页面 这导致了问题 正确的顺序是
  • 如何使用JQuery和Django(ajax + HttpResponse)?

    假设我有一个 AJAX 函数 function callpage ajax method get url abc data x 3 beforeSend function success function html IF HTTPRESPO
  • 如何设置在浏览器的新选项卡(_blank)中打开的pdf文件的标题

    这是我的尝试 是否在新选项卡上打开 但它总是显示test pdf如题 function titlepath path name alert path alert name document title name window open pa
  • `attr('checked', false)` 不适用于 IE6

    正如标题所说 我无法获取 attr checked false 在 IE6 上工作 我正在克隆一些 HTML 然后在将新克隆的 HTML 分配给元素之前 我会运行它并取消选中新克隆部分中的所有复选框 这在除 IE 6 之外的所有浏览器中都可
  • 单击导航项锚链接时如何关闭切换菜单

    请看我的FIDDLE http jsfiddle net ayhpp8ax 我有一个带有 响应式 导航菜单 带有指向页面上元素的锚链接 的 1 页网站 当浏览器视口小于特定宽度 在我的情况下为 767px 时 使用此 javascript
  • jQuery mobile 中的文本区域高度和宽度?

    我修复了 jQuery mobile 中文本区域元素的高度 并且在纵向中得到了完美的高度和宽度 但在横向中宽度没有放大 谁能帮我 提前致谢 HTML
  • Jquery 悬停卡

    我在用着http designwithpc com Plugins Hovercard http designwithpc com Plugins Hovercard 但我不知道如何在悬停卡上声明 var 每个工作描述都有自己的 ID 当悬
  • 在特定页面上执行 javascript 的正确“Rails”方式

    我试图在特定页面上运行 javascript 而我唯一的解决方案似乎是反模式 我有controller js内部生成的assets javascripts 我在用着gem jquery turbolinks 我的代码类似于以下内容 docu
  • 简单的 jQuery(scrollTo 和 animate)在 IE 中不起作用

    我刚刚注意到一些简单的 jQuery 无法在移动版 IE9 和 IE10 上运行 我有一些版权链接和简单的滑动接触形式 它使用animate 我还结合使用scrollTo 插件和jQuery 我尝试了不同的版本 仍然没有解决 也许我错过了一
  • 从 HTTP 登录到 HTTPS

    我的网站默认使用 HTTP 我确实有一个启用 HTTPS 的证书 但只有其上的某些区域强制建立安全连接 登录是通过 Ajax 处理的 我想开始使用 SSL 即使请求来自 HTTP 我尝试强制请求的地址具有 HTTPS 并且它完美地回复 然而
  • 使用单击事件调用“trigger”方法时的复选框值

    如何在点击事件中获取正确的当前值以通过触发器调用 Html
  • Flot 库将 y 轴设置为最小值 0 和最大值 24

    如何将 y 轴设置在 0 到 24 的范围内 这是我的代码 j plot j placeholder d1 xaxis mode time min new Date 2010 11 01 getTime max new Date 2011
  • 测量窗口偏移

    有没有一种方法可以测量 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方式 优化点 在抽奖过程中 禁止重复点击抽