原生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 相关文章推荐
网页自动跳转代码收集
Sep 27 Javascript
基于jquery的防止大图片撑破页面的实现代码(立即缩放)
Oct 24 Javascript
JavaScript中json使用自己总结
Aug 13 Javascript
将字符串中由空格隔开的每个单词首字母大写
Apr 06 Javascript
使用getBoundingClientRect方法实现简洁的sticky组件的方法
Mar 22 Javascript
javascript读取文本节点方法小结
Dec 15 Javascript
jquery实现输入框实时输入触发事件代码
Dec 21 Javascript
JS实现页面打印功能
Mar 16 Javascript
Vue2.x中的Render函数详解
May 30 Javascript
微信小程序分享海报生成的实现方法
Dec 10 Javascript
VUE安装使用教程详解
Jun 03 Javascript
Vue中keep-alive组件作用详解
Feb 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
Terran建筑一览
2020/03/14 星际争霸
编译问题
2006/10/09 PHP
php更改目录及子目录下所有的文件后缀扩展名的代码
2010/10/12 PHP
PHP Curl出现403错误的解决办法
2014/05/29 PHP
PHP实现获取ip地址的5种方法,以及插入用户登录日志操作示例
2019/02/28 PHP
js 判断 enter 事件
2009/02/12 Javascript
javascript学习笔记(六) Date 日期类型
2012/06/19 Javascript
基于jquery插件制作左右按钮与标题文字图片切换效果
2013/11/07 Javascript
js获取IP地址的方法小结
2014/07/01 Javascript
js与C#进行时间戳转换
2014/11/14 Javascript
js倒计时简单实现方法
2015/12/17 Javascript
浅析JS获取url中的参数实例代码
2016/06/14 Javascript
微信+angularJS的SPA应用中用router进行页面跳转,jssdk校验失败问题解决
2016/09/09 Javascript
Javascript动画效果(2)
2016/10/11 Javascript
老生常谈js中0到底是 true 还是 false
2017/03/08 Javascript
Node接收电子邮件的实例代码
2017/07/21 Javascript
js实现带箭头的进度流程
2020/03/26 Javascript
jquery实现手风琴案例
2020/05/04 jQuery
python版本的读写锁操作方法
2016/04/25 Python
Tensorflow环境搭建的方法步骤
2018/02/07 Python
用Python编写一个简单的CS架构后门的方法
2018/11/20 Python
Python中将两个或多个list合成一个list的方法小结
2019/05/12 Python
pytorch 自定义数据集加载方法
2019/08/18 Python
tensorflow中tf.slice和tf.gather切片函数的使用
2020/01/19 Python
纯css3(无图片/js)制作的几个社交媒体网站的图标
2013/03/21 HTML / CSS
SQL Server笔试题
2012/01/10 面试题
新员工欢迎词
2014/01/12 职场文书
工作骂脏话检讨书
2014/10/05 职场文书
二手车交易协议书标准版
2014/11/16 职场文书
高中社区服务活动报告
2015/02/05 职场文书
我是特种兵观后感
2015/06/11 职场文书
有关西游记的读书笔记
2015/06/25 职场文书
Java面试题冲刺第十七天--基础篇3
2021/08/07 面试题
一些让Python代码简洁的实用技巧总结
2021/08/23 Python
使用Apache Camel表达REST服务的方法
2022/06/10 Servers
css清除浮动clearfix:after的用法详解(附完整代码)
2023/05/21 HTML / CSS