原生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分析、压缩工具 JavaScript Analyser
Nov 30 Javascript
jQuery中hover方法和toggle方法使用指南
Feb 27 Javascript
js实现鼠标点击文本框自动选中内容的方法
Aug 20 Javascript
Jquery和BigFileUpload实现大文件上传及进度条显示
Jun 27 Javascript
jQuery简单实现title提示效果示例
Aug 01 Javascript
微信小程序网络请求的封装与填坑之路
Apr 01 Javascript
详解Vue文档中几个易忽视部分的剖析
Mar 24 Javascript
async/await优雅的错误处理方法总结
Jan 30 Javascript
基于elementUI使用v-model实现经纬度输入的vue组件
May 12 Javascript
微信小程序引入模块中wxml、wxss、js的方法示例
Aug 09 Javascript
layui radio点击事件实现input显示和隐藏的例子
Sep 02 Javascript
Moment的feature导致线上bug解决分析
Sep 23 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中的串行化变量和序列化对象
2006/09/05 PHP
改进的IP计数器
2006/10/09 PHP
php设计模式 Facade(外观模式)
2011/06/26 PHP
PHP内核介绍及扩展开发指南―基础知识
2011/09/11 PHP
Laravel 5 框架入门(一)
2015/04/09 PHP
PHP快速排序算法实现的原理及代码详解
2019/04/03 PHP
javascript dom 基本操作小结
2010/04/11 Javascript
Js实现无刷新删除内容
2015/04/29 Javascript
jquery+CSS3模拟Path2.0动画菜单效果代码
2015/08/31 Javascript
nodejs 中模拟实现 emmiter 自定义事件
2016/02/22 NodeJs
详解VueJs异步动态加载块
2017/03/09 Javascript
浅谈事件冒泡、事件委托、jQuery元素节点操作、滚轮事件与函数节流
2017/07/22 jQuery
JS与CSS3实现图片响应鼠标移动放大效果示例
2018/05/04 Javascript
详解Vue This$Store总结
2018/12/17 Javascript
Vue.js计算机属性computed和methods方法详解
2019/10/12 Javascript
用js编写留言板
2020/03/17 Javascript
python爬取cnvd漏洞库信息的实例
2019/02/14 Python
详解用Python实现自动化监控远程服务器
2019/05/18 Python
Pytorch 中retain_graph的用法详解
2020/01/07 Python
python3格式化字符串 f-string的高级用法(推荐)
2020/03/04 Python
简述python&amp;pytorch 随机种子的实现
2020/10/07 Python
Microsoft新加坡官方网站:购买微软最新软件和技术产品
2016/10/28 全球购物
室内设计自我鉴定
2013/10/15 职场文书
团员个人的自我评价
2013/12/02 职场文书
物业工作计划书
2014/01/10 职场文书
小学生期末评语大全
2014/04/21 职场文书
幼儿评语大全
2014/04/30 职场文书
演讲稿格式
2014/04/30 职场文书
小学教师培训方案
2014/06/09 职场文书
驾驶员安全责任书范本
2014/07/24 职场文书
基层党员对照检查材料
2014/09/24 职场文书
社区四风存在问题及整改措施
2014/10/26 职场文书
学校推普周活动总结
2015/05/07 职场文书
2019大学生预备党员转正思想汇报
2019/06/21 职场文书
pandas取dataframe特定行列的实现方法
2021/05/24 Python
Python函数对象与闭包函数
2022/04/13 Python