原生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 相关文章推荐
日历查询的算法 如何计算某一天是星期几
Dec 12 Javascript
js 字符串转换成数字的三种方法
Mar 23 Javascript
jquery实现隐藏与显示动画效果/输入框字符动态递减/导航按钮切换
Jul 01 Javascript
浅谈checkbox的一些操作(实战经验)
Nov 20 Javascript
深入理解JSON数据源格式
Jan 10 Javascript
7个JS基础知识总结
Mar 05 Javascript
JavaScript代码应该放在HTML代码哪个位置比较好?
Oct 16 Javascript
详解Bootstrap各式各样的按钮(推荐)
Dec 13 Javascript
angular 动态组件类型详解(四种组件类型)
Feb 22 Javascript
JavaScript箭头(arrow)函数详解
Jun 04 Javascript
angular 用拦截器统一处理http请求和响应的方法
Jun 08 Javascript
Vue 父子组件数据传递的四种方式( inheritAttrs + $attrs + $listeners)
May 04 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输出数组中重名的元素的几种处理方法
2012/09/05 PHP
PHP对MongoDB[NoSQL]数据库的操作
2013/03/01 PHP
PHP file_get_contents设置超时处理方法
2013/09/30 PHP
Linux操作系统安装LAMP环境
2015/06/26 PHP
PHP扩展Memcache分布式部署方案
2015/12/06 PHP
PHP常用设计模式之委托设计模式
2016/02/13 PHP
php面向对象的用户登录身份验证
2017/06/08 PHP
PHP实现合并两个排序链表的方法
2018/01/19 PHP
PHP面向对象五大原则之开放-封闭原则(OCP)详解
2018/04/04 PHP
浅说js变量
2011/05/25 Javascript
jQuery 在光标定位的地方插入文字的插件
2012/05/10 Javascript
IE6背景图片不缓存问题解决方案及图片使用策略多个方法小结
2012/05/14 Javascript
基于jQuery中对数组进行操作的方法
2013/04/16 Javascript
JavaScript通过Date-Mask将日期转换成字符串的方法
2015/06/04 Javascript
基于Bootstrap实现tab标签切换效果
2020/04/15 Javascript
通过BootStrap-select插件 js jQuery控制select属性变化
2017/01/03 Javascript
JS数组返回去重后数据的方法解析
2017/01/03 Javascript
深入理解在JS中通过四种设置事件处理程序的方法
2017/03/02 Javascript
jQuery实现下拉菜单的实例代码
2017/06/19 jQuery
原生javascript实现连连看游戏
2019/01/03 Javascript
微信小程序实现搜索功能并跳转搜索结果页面
2019/05/18 Javascript
layui table 获取分页 limit的方法
2019/09/20 Javascript
element-ui中el-upload多文件一次性上传的实现
2020/12/02 Javascript
用Python生成器实现微线程编程的教程
2015/04/13 Python
Python中for循环控制语句用法实例
2015/06/02 Python
python Socket之客户端和服务端握手详解
2017/09/18 Python
为什么Python中没有&quot;a++&quot;这种写法
2018/11/27 Python
详解python-图像处理(映射变换)
2019/03/22 Python
在Python中表示一个对象的方法
2019/06/25 Python
python爬虫 正则表达式解析
2019/09/28 Python
使用Python将Exception异常错误堆栈信息写入日志文件
2020/04/08 Python
2014法院干警廉洁警示教育思想汇报
2014/09/13 职场文书
财务会计岗位职责
2015/02/03 职场文书
英文投诉信格式
2015/07/03 职场文书
浅谈Python数学建模之线性规划
2021/06/23 Python
SpringBoot实现quartz定时任务可视化管理功能
2021/08/30 Java/Android