原生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 相关文章推荐
List the Codec Files on a Computer
Jun 18 Javascript
Extjs 几个方法的讨论
Jan 28 Javascript
Javascript 匿名函数及其代码模式原理
Mar 19 Javascript
jQuery温习篇 强大的JQuery选择器
Apr 24 Javascript
jQuery实现列表的全选功能
Mar 18 Javascript
利用node.js实现自动生成前端项目组件的方法详解
Jul 12 Javascript
EL表达式截取字符串的函数说明
Sep 22 Javascript
详解Vue路由钩子及应用场景(小结)
Nov 07 Javascript
javascript实现抢购倒计时程序
Aug 26 Javascript
js贪心算法 钱币找零问题代码实例
Sep 11 Javascript
Javascript 关于基本类型和引用类型的个人理解
Nov 01 Javascript
在HTML中使用JavaScript的两种方法
Dec 24 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
用header 发送cookie的php代码
2007/03/16 PHP
解析func_num_args与func_get_args函数的使用
2013/06/24 PHP
PHP、Python和Javascript的装饰器模式对比
2015/02/03 PHP
PHP接收json 并将接收数据插入数据库的实现代码
2015/12/01 PHP
javascript 客户端验证上传图片的大小(兼容IE和火狐)
2009/08/15 Javascript
jQuery动态添加的元素绑定事件处理函数代码
2011/08/02 Javascript
Table冻结表头示例代码
2013/08/20 Javascript
简单实用的反馈表单无刷新提交带验证
2013/11/15 Javascript
如何动态加载外部Javascript文件
2015/12/02 Javascript
EasyUi combotree 实现动态加载树节点
2016/04/01 Javascript
jQuery Mobile框架中的表单组件基础使用教程
2016/05/17 Javascript
JavaScript动态检验密码强度的实现方法
2016/11/09 Javascript
vue.js学习之vue-cli定制脚手架详解
2017/07/02 Javascript
JavaScript之DOM_动力节点Java学院整理
2017/07/03 Javascript
深入理解Vue 的条件渲染和列表渲染
2017/09/01 Javascript
webpack引入eslint配置详解
2018/01/22 Javascript
浅谈Vue-cli单文件组件引入less,sass,css样式的不同方法
2018/03/13 Javascript
一个Vue页面的内存泄露分析详解
2018/06/25 Javascript
js中实例与对象的区别讲解
2019/01/21 Javascript
Vue实现商品分类菜单数量提示功能
2019/07/26 Javascript
python实现挑选出来100以内的质数
2015/03/24 Python
大家都说好用的Python命令行库click的使用
2019/11/07 Python
维多利亚的秘密阿联酋官网:Victoria’s Secret阿联酋
2019/12/07 全球购物
函授大专自我鉴定
2013/11/01 职场文书
给客户的道歉信
2014/01/13 职场文书
优秀教师获奖感言
2014/01/31 职场文书
cf收人广告词大全
2014/03/14 职场文书
企业形象策划方案
2014/05/29 职场文书
2014年村支部书记四风对照检查材料思想汇报
2014/10/02 职场文书
2014年生活老师工作总结
2014/12/23 职场文书
谢师宴邀请函
2015/02/02 职场文书
销售人员管理制度
2015/08/06 职场文书
奖学金申请个人主要事迹材料
2015/11/04 职场文书
2016年劳模先进事迹材料
2016/02/25 职场文书
如何用RabbitMQ和Swoole实现一个异步任务系统
2021/05/29 PHP
Python自动化爬取天眼查数据的实现
2021/06/15 Python