原生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 相关文章推荐
告诉大家什么是JSON
Jun 10 Javascript
可简单避免的三个JS发布错误的详细介绍
Aug 02 Javascript
JQuery 实现在同一页面锚点链接之间的平滑滚动
Oct 29 Javascript
Javascript基础教程之数据类型 (数值 Number)
Jan 18 Javascript
深入理解JavaScript系列(49):Function模式(上篇)
Mar 04 Javascript
js点击列表文字对应该行显示背景颜色的实现代码
Aug 05 Javascript
JS实现左右无缝轮播图代码
May 01 Javascript
js实现一个简单的MVVM框架示例
Jan 15 Javascript
基于VuePress 轻量级静态网站生成器的实现方法
Apr 17 Javascript
Vue 指令实现按钮级别权限管理功能
Apr 23 Javascript
微信小程序跨页面传递data数据方法解析
Dec 13 Javascript
几款主流好用的富文本编辑器(所见即所得常用编辑器)介绍
Mar 17 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/06/05 PHP
PHP下escape解码函数的实现方法
2010/08/08 PHP
thinkphp5.1 文件引入路径问题及注意事项
2018/06/13 PHP
PHP crypt()函数的用法讲解
2019/02/15 PHP
php写app用的框架整理
2019/09/29 PHP
Javascript 模式实例 观察者模式
2009/10/24 Javascript
lyhucSelect基于Jquery的Select数据联动插件
2011/03/29 Javascript
js获取html页面节点方法(递归方式)
2013/12/13 Javascript
JavaScript弹出窗口方法汇总
2014/08/12 Javascript
浅谈Javascript中深复制
2014/12/01 Javascript
jQuery实现购物车数字加减效果
2015/03/14 Javascript
JQuery中clone方法复制节点
2015/05/18 Javascript
JS实现自动变化的导航菜单效果代码
2015/09/09 Javascript
jQuery动画效果图片轮播特效
2016/01/12 Javascript
AngularJS实现树形结构(ztree)菜单示例代码
2016/09/18 Javascript
简单谈谈关于Angular Cli打包的事
2017/09/05 Javascript
详解.vue文件中style标签的几个标识符
2018/07/17 Javascript
webpack@v4升级踩坑(小结)
2018/10/08 Javascript
js实现动态添加上传文件页面
2018/10/22 Javascript
vue结合element-ui使用示例
2019/01/24 Javascript
vue-cli 关闭热更新操作
2020/09/18 Javascript
在Python的Django框架中使用通用视图的方法
2015/07/21 Python
pandas 取出表中一列数据所有的值并转换为array类型的方法
2018/04/11 Python
django美化后台django-suit的安装配置操作
2020/07/12 Python
Python2.6版本pip安装步骤解析
2020/08/17 Python
css3 transform导致子元素固定定位变成绝对定位的方法
2020/03/06 HTML / CSS
HTML5 文件上传下载的实例代码
2017/07/03 HTML / CSS
欧洲领先的火车票和大巴票预订平台:Trainline
2018/12/26 全球购物
经典商业广告词
2014/03/13 职场文书
原料仓仓管员岗位职责
2014/07/08 职场文书
解除劳动关系协议书范文
2014/09/11 职场文书
2014客服代表实习自我鉴定
2014/09/18 职场文书
毕业典礼致辞
2015/07/29 职场文书
2016年国培研修日志
2015/11/13 职场文书
检讨书格式
2019/04/25 职场文书
使用 Apache Superset 可视化 ClickHouse 数据的两种方法
2021/07/07 Servers