原生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基础知识大全 便于大家学习,也便于我自己查看
Aug 17 Javascript
浅析JavaScript中的delete运算符
Nov 30 Javascript
javascript实现全角与半角字符的转换
Jan 07 Javascript
JavaScript中的值是按值传递还是按引用传递问题探讨
Jan 30 Javascript
JS实现文字放大效果的方法
Mar 03 Javascript
WebGL利用FBO完成立方体贴图效果完整实例(附demo源码下载)
Jan 26 Javascript
javascript常见数字进制转换实例分析
Apr 21 Javascript
微信小程序开发之toast提示插件使用示例
Jun 08 Javascript
为什么使用koa2搭建微信第三方公众平台的原因
May 16 Javascript
解决layui前端框架 form表单,table表等内置控件不显示的问题
Aug 19 Javascript
使用jQuery给Table动态增加行、清空table的方法
Sep 05 jQuery
vue+webpack dev本地调试全局样式引用失效的解决方案
Nov 12 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
一键删除顽固的空文件夹 软件下载
2007/01/26 PHP
php出现Cannot modify header information问题的解决方法大全
2008/04/09 PHP
php数组函数序列之each() - 获取数组当前内部指针所指向元素的键名和键值,并将指针移到下一位
2011/10/31 PHP
比file_get_contents稳定的curl_get_contents分享
2012/01/11 PHP
PHP获取MySql新增记录ID值的3种方法
2014/06/24 PHP
php base64 编码与解码实例代码
2017/03/21 PHP
PHP使用文件锁解决高并发问题示例
2018/03/29 PHP
jQuery实现产品对比功能附源码下载
2016/08/09 Javascript
微信小程序链接传参并跳转新页面
2016/11/29 Javascript
JS字符串按逗号和回车分隔的方法
2017/04/25 Javascript
基于Vue实现timepicker
2017/04/25 Javascript
详解JS构造函数中this和return
2017/09/16 Javascript
jQuery实现点击下拉框中的值累加到文本框中的方法示例
2017/10/28 jQuery
echarts同一页面中四个图表切换的js数据交互方法示例
2018/07/03 Javascript
微信小程序wepy框架笔记小结
2018/08/08 Javascript
webpack4 SplitChunks实现代码分隔详解
2019/05/23 Javascript
小程序实现左滑删除效果
2019/07/25 Javascript
浅谈layui 绑定form submit提交表单的注意事项
2019/10/25 Javascript
ant-design-vue 快速避坑指南(推荐)
2020/01/21 Javascript
javascript-hashchange事件和历史状态管理实例分析
2020/04/18 Javascript
关于uniApp editor微信滑动问题
2021/01/15 Javascript
python 七种邮件内容发送方法实例
2014/04/22 Python
Python中给List添加元素的4种方法分享
2014/11/28 Python
Django Highcharts制作图表
2016/08/27 Python
python 移除字符串尾部的数字方法
2018/07/17 Python
Python3显示当前时间、计算时间差及时间加减法示例代码
2019/09/07 Python
Django admin禁用编辑链接和添加删除操作详解
2019/11/15 Python
Django 再谈一谈json序列化
2020/03/16 Python
大一新生军训时的自我评价分享
2013/12/05 职场文书
入学生会自荐书范文
2014/02/05 职场文书
军训考核自我鉴定
2014/02/13 职场文书
网吧消防安全责任书
2014/07/29 职场文书
中学团支部工作总结
2015/08/13 职场文书
2016大学生党校学习心得体会
2016/01/06 职场文书
CSS3实现的侧滑菜单
2021/04/27 HTML / CSS
Python超详细分步解析随机漫步
2022/03/17 Python