原生JS实现九宫格抽奖


Posted in Javascript onSeptember 13, 2020

本文实例为大家分享了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>

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
一个javascript图片阅览组件
Nov 09 Javascript
node.js读取文件到字符串的方法
Jun 29 Javascript
AngularJS数据源的多种获取方式汇总
Feb 02 Javascript
AJAX实现瀑布流触发分页与分页触发瀑布流的方法
May 23 Javascript
require、backbone等重构手机图片查看器
Nov 17 Javascript
js中string和number类型互转换技巧(分享)
Nov 28 Javascript
详解Jquery Easyui的验证扩展
Jan 09 Javascript
jQuery实现的简单对话框拖动功能示例
Jun 05 jQuery
微信小程序如何刷新当前界面的实现方法
Jun 07 Javascript
浅谈JS中this在各个场景下的指向
Aug 14 Javascript
Vue3新特性之在Composition API中使用CSS Modules
Jul 13 Javascript
JavaScript this关键字的深入详解
Jan 14 Javascript
jQuery实现带进度条的轮播图
Sep 13 #jQuery
js+canvas实现画板功能
Sep 13 #Javascript
jQuery实现鼠标拖拽登录框移动效果
Sep 13 #jQuery
jQuery实现简单全选框
Sep 13 #jQuery
jQuery+ajax实现用户登录验证
Sep 13 #jQuery
js+audio实现音乐播放器
Sep 13 #Javascript
js+canvas实现刮刮奖功能
Sep 13 #Javascript
You might like
PHP 程序员的调试技术小结
2009/11/15 PHP
探讨:如何使用PhpDocumentor生成文档
2013/06/25 PHP
微信支付开发教程(一)微信支付URL配置
2014/05/28 PHP
ThinkPHP的L方法使用简介
2014/06/18 PHP
php加密解密字符串示例
2016/10/13 PHP
用Div仿showModalDialog模式菜单的效果的代码
2007/03/05 Javascript
Javascript和Ajax中文乱码吐血版解决方案
2009/12/21 Javascript
jquery 元素相对定位代码
2010/10/15 Javascript
nodeType属性返回被选节点的节点类型介绍
2013/11/22 Javascript
jQuery自定义事件的简单实现代码
2014/01/27 Javascript
JavaScript省市联动实现代码
2014/02/15 Javascript
jQuery针对各类元素操作基础教程
2014/08/29 Javascript
JS限制文本框只能输入数字和字母方法
2015/02/28 Javascript
快速获取/设置iframe内对象元素的几种js实现方法
2016/05/20 Javascript
如何让你的JS代码更好看易读
2017/12/01 Javascript
小程序click-scroll组件设计
2019/06/18 Javascript
解决Layui数据表格的宽高问题
2019/09/28 Javascript
JavaScript队列结构Queue实现过程解析
2020/03/07 Javascript
jQuery实现的解析本地 XML 文档操作示例
2020/04/30 jQuery
Python 2与Python 3版本和编码的对比
2017/02/14 Python
浅谈Python由__dict__和dir()引发的一些思考
2017/10/30 Python
python监控nginx端口和进程状态
2019/09/06 Python
Python爬虫模拟登陆哔哩哔哩(bilibili)并突破点选验证码功能
2020/12/21 Python
灵活运用CSS3特性绘制简易版围棋效果
2016/09/28 HTML / CSS
汽车运用工程毕业生自荐信
2013/10/29 职场文书
航空大学应届生求职信
2013/11/10 职场文书
实习生自我鉴定
2013/12/12 职场文书
体育教师个人的自我评价
2014/02/16 职场文书
村党支部换届选举方案
2014/05/02 职场文书
法人任命书范本
2014/06/04 职场文书
校园文化标语
2014/06/18 职场文书
殡葬服务心得体会
2014/09/11 职场文书
会计电算化实训报告
2014/11/04 职场文书
电影开国大典观后感
2015/06/04 职场文书
标会主持词应该怎么写?
2019/08/15 职场文书
K8s部署发布Golang应用程序的实现方法
2021/07/16 Golang