原生JS实现九宫格抽奖

作者:蹦蹦蛙 时间:2024-05-02 17:24:19 

本文实例为大家分享了JS实现九宫格抽奖的具体代码,供大家参考,具体内容如下

上代码:


<div class="wrapper">
   <div>谢谢惠顾</div>
   <div>十万元现金</div>
   <div>谢谢惠顾</div>
   <div>iphone11</div>
   <div>抽奖</div>
   <div>美的冰箱</div>
   <div>谢谢惠顾</div>
   <div>50元红包</div>
   <div>谢谢惠顾</div>
 </div>
<div class="result"></div>

CSS样式代码:


<style>
   .wrapper {
     width: 300px;
     height: 300px;
     display: flex;
     flex-flow: row wrap;
     position: absolute;
     top: 0;
     left: 0;
     right: 0;
     bottom: 0;
     margin: auto;
     border: 1px solid red;
   }

.wrapper div {
     flex: none;
     width: 100px;
     height: 100px;
     box-sizing: border-box;
     border: 1px solid red;
     display: flex;
     align-items: center;
     justify-content: center;
   }

.active {
     background-color: red;
   }

.wrapper div:nth-child(5) {
     cursor: pointer;
   }

.result {
     height: 100px;
     display: inline-block;
     position: absolute;
     top: 50px;
     left: 0;
     right: 0;
     margin: auto;
     text-align: center;
     line-height: 100px;
     font-size: 40px;
     font-weight: 700;
     color: #ff4400;
   }
</style>

JS代码:


<script>
   var t, m, num, time, index, target, current;
   //以索引值为0,1,2,5,8,7,6,3的div元素为循环目标,
   //因为以num总数递减的方式进行循环,故将数组倒序定义
   var arr = [3, 6, 7, 8, 5, 2, 1, 0];
   var div = document.querySelectorAll('.wrapper div');
   var result = document.querySelector('.result');
   div[4].onclick = function() {
     clearInterval(time);
     div[4].innerHTML = '抽奖中...';
     result.innerHTML = '';
     //中奖目标设为0到7的随机整数
     target = Math.floor(Math.random() * 8);
     //起始位置设为随机,且以num为总的循环数
     num = Math.floor(Math.random() * 8) + 40;
     //将总循环数的2/3保存,方便调整速率峰值出现的时间
     //若m为总循环的1/2,则速度峰值会在总时长的中间出现
     m = Math.floor(num * 2 / 3);
     //此处if语句可限制中奖,从第一个开始外圈顺时针分别对应7,6,5,4,3,2,1,0
     //如设置target == 6 即限制中十万元现金,以下代码为100%不中奖
     if (target == 6|| target == 4 || target == 2 || target == 0) {
        target++;
      }
     speed();

function speed() {
       //将循环目标div的索引值转换为循环总数的表达式
       index = arr[num % 8];
       //给当前循环元素添加样式,并移除之前的样式
       if (current) {
         current.remove('active');
       }
       div[index].classList.add('active');
       current = div[index].classList;
       //速度函数,可调试速率
       t = Math.floor(Math.pow((num - m), 2) + 250);
       //一次性定时器,嵌套递归循环控制速度
       time = setTimeout(function() {
           speed()
         }, t)
       //判断中奖结果
       if (num == target) {
         clearTimeout(time);
         div[4].innerHTML = '抽奖';
         switch (target) {
           case 6:
             result.innerHTML = '恭喜您抽中' + div[arr[target % 8]].innerHTML + '大奖';
             break;
           case 4:
             result.innerHTML = '恭喜您抽中' + div[arr[target % 8]].innerHTML;
             break;
           case 2:
             result.innerHTML = '恭喜您抽中' + div[arr[target % 8]].innerHTML;
             break;
           case 0:
             result.innerHTML = '恭喜您抽中' + div[arr[target % 8]].innerHTML;
             break;
           default:
             result.innerHTML = div[arr[target % 8]].innerHTML;
         }
       }
       num--;
     }
   }

</script>

来源:https://blog.csdn.net/nervousfrog/article/details/108551049

标签:js,九宫格,抽奖
0
投稿

猜你喜欢

  • [图文]三分钟学会Sql Server的复制功能

    2024-01-25 10:47:51
  • Python 面向对象编程详解

    2023-06-25 05:24:23
  • Tensorflow加载模型实现图像分类识别流程详解

    2023-12-22 02:31:13
  • python实现电脑自动关机

    2021-05-03 13:41:43
  • Flask框架工厂函数用法实例分析

    2023-03-08 08:14:30
  • Python:format格式化字符串详解

    2021-02-11 19:23:58
  • 基于python实现查询ip地址来源

    2021-02-10 14:45:52
  • python使用webbrowser浏览指定url的方法

    2023-10-24 03:33:31
  • python元组的概念知识点

    2022-01-03 19:29:19
  • django迁移文件migrations的实现

    2022-10-27 02:48:44
  • 关于Thinkphp6的日志问题

    2023-06-06 10:54:23
  • python 实现"神经衰弱"翻牌游戏

    2023-02-08 05:34:05
  • python (logging) 日志按日期、大小回滚的操作

    2023-10-03 02:42:21
  • python正则表达式去除两个特殊字符间的内容方法

    2023-08-24 16:22:10
  • python定时按日期备份MySQL数据并压缩

    2024-01-22 11:39:22
  • tensorflow可视化Keras框架中Tensorboard使用示例

    2023-08-09 01:39:27
  • 在 WordPress 的页眉(header)和页脚(footer)添加代码方法

    2023-08-19 21:34:45
  • python多进程实现文件下载传输功能

    2022-06-27 02:22:41
  • 5个常见的XHTML验证错误

    2010-01-15 20:24:00
  • Python求解任意闭区间的所有素数

    2023-10-12 00:07:12
  • asp之家 网络编程 m.aspxhome.com