JS实现方形抽奖效果


Posted in Javascript onAugust 27, 2018

本文实例为大家分享了JS实现抽奖效果展示的具体代码,供大家参考,具体内容如下

展示:

JS实现方形抽奖效果JS实现方形抽奖效果

HTML:

<div id="table"></div>
<div id="btn">
   <button onclick="start('p', 'active','newactive', 100)">顺序抽/停止</button>
  <button onclick="startRan('p', 'active','newactive', 100)">随机抽/停止</button>
</div>

CSS:

table {
 text-align: center;
 border-collapse: collapse;
}

table * {
 width: 60px;
 height: 60px;
}

#btn {
 box-sizing: border-box;
 width: 190px;
 display: flex;
 justify-content: space-between;
 align-items: center;
}

#btn * {
 flex-grow: 1;
 background-color: red;
 border: 1px solid #000;
 color: #fff;
 height: 30px;
 font-size: 10px;
}

.active {
 background-color: #ccc;
}

.newactive {
 background-color: #00ffff;
}

JavaScript:

// 定义一个奖池
 var jackpot = [
  ['奖品A1', '奖品A2', '奖品A3'],
  ['奖品B1', '奖品B2', '奖品B3'],
  ['奖品C1', '奖品C2', '奖品C3']
 ];

 /**
  * [table 创建表格]
  * @param {[Array]} arr  [奖品数组]
  * @param {[String]} selector [选择器]
  * @return {[String]} table [返回一个HTML标签]
  */
 function table(arr, selector) {

  var table = '<table border="1">';

  for (var i = 0; i < arr.length; i++) {

   table += '<tr>';

   for (var j = 0; j < arr[i].length; j++) {

    table += '<td class="' + selector + '">' + arr[i][j] + '</td>';

   }

   table += '</tr>';

  }

  table += '</table>';

  return table;

 }

 // 输出奖池
 document.getElementById('table').innerHTML = table(jackpot, 'p');

 var key = true; // start,startRan控制器
 var num = 3; // 抽奖次数
 // 抽过的还能抽  可定义抽奖次数-->次数限制      num需要定义
 //     不定义抽奖次数-->次数无限      num不需定义
 // 抽过的不能抽  可定义抽奖次数-->次数限制(次数不超过选择器长度) num需要定义
 //     不定义抽奖次数-->次数等于选择器长度    num需要定义

 /**
  * [start 开始抽奖]
  * @param {[String]} selector [选择器]
  * @param {[String]} addselector [给选中的添加样式]
  * @param {[String]} newaddselector [中奖奖品样式]
  * @param {[Number]} speed  [时间越小,速度越快]
  * @return {[type]}    [description]
  */
 function start(selector, addselector, newaddselector, speed) {

  if (key) {

   if (typeof(num) == 'undefined' || num != 0) {

    var count = 0;

    // 如果写成var timer会每次执行时重新定义一个timer,那么clearInterval(timer)只能清除后面定义的那个timer,前面定义的已经没有变量指向了 无法清除
    timer = setInterval(function() {

     if (count < $('.' + selector).length) {

      $('.' + selector).eq(count).addClass(addselector);

      $('.' + selector).eq(count).siblings().removeClass(addselector);

      $('.' + selector).eq(count).parent().siblings().children().removeClass(addselector);

      count++;

     } else {

      count = 0;

     }

    }, speed);

    if(typeof(num) != 'undefined'){

     num--;

    }

   } else{

    key = false;

    console.log("抽奖结束");

   }

  } else {

   clearInterval(timer);

   // 决定抽中的奖品的样式和抽中的奖品能否继续抽
   $('.' + addselector).addClass(newaddselector).removeClass(selector);

   // 奖品
   console.log($('.' + addselector).html());

  }

  key = !key;

 }

 /**
  * [start 开始抽奖]
  * @param {[String]} selector [选择器]
  * @param {[String]} addselector [给选中的添加样式]
  * @param {[String]} newaddselector [中奖奖品样式]
  * @param {[Number]} speed  [时间越小,速度越快]
  * @return {[type]}    [description]
  */
 function startRan(selector, addselector, newaddselector, speed) {

  if (key) {

   if (typeof(num) == 'undefined' || num != 0) {

    // 如果写成var timer会每次执行时重新定义一个timer,那么clearInterval(timer)只能清除后面定义的那个timer,前面定义的已经没有变量指向了 无法清除
    timer = setInterval(function() {

     var count = Math.floor(Math.random() * $('.' + selector).length);

     $('.' + selector).eq(count).addClass(addselector);

     $('.' + selector).eq(count).siblings().removeClass(addselector);

     $('.' + selector).eq(count).parent().siblings().children().removeClass(addselector);

    }, speed);

    if(typeof(num) != 'undefined'){

     num--;

    }

   } else {

    key = false;

    console.log("抽奖结束");

   }


  } else {

   clearInterval(timer);

   // 决定抽中的奖品的样式和抽中的奖品能否继续抽
   $('.' + addselector).addClass(newaddselector).removeClass(selector);

   // 奖品
   console.log($('.' + addselector).html());

  }

  key = !key;

}

GitHub:地址

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
js open() 与showModalDialog()方法使用介绍
Sep 10 Javascript
JQuery调用WebServices的方法和4个实例
May 06 Javascript
js实现飞入星星特效代码
Oct 17 Javascript
jQuery实现的类似淘宝网站搜索框样式代码分享
Aug 24 Javascript
jQuery Mobile页面返回不需要重新get
Apr 26 Javascript
对Angular.js Controller如何进行单元测试
Oct 25 Javascript
vue元素实现动画过渡效果
Jul 01 Javascript
深入浅析Node.js 事件循环、定时器和process.nextTick()
Oct 22 Javascript
详解vuex的简单todolist例子
Jul 14 Javascript
ES6中异步对象Promise用法详解
Jul 31 Javascript
Vue列表如何实现滚动到指定位置样式改变效果
May 09 Javascript
vue 组件简介
Jul 31 Javascript
对vuejs的v-for遍历、v-bind动态改变值、v-if进行判断的实例讲解
Aug 27 #Javascript
Vuex 在Vue 组件中获得Vuex 状态state的方法
Aug 27 #Javascript
JS实现匀速与减速缓慢运动的动画效果封装示例
Aug 27 #Javascript
vue展示dicom文件医疗系统的实现代码
Aug 27 #Javascript
vue中子组件的methods中获取到props中的值方法
Aug 27 #Javascript
最适应的vue.js的form提交涉及多种插件【推荐】
Aug 27 #Javascript
vue里面v-bind和Props 利用props绑定动态数据的方法
Aug 27 #Javascript
You might like
php列出一个目录下的所有文件的代码
2012/10/09 PHP
PHP实现阳历到农历转换的类实例
2015/03/07 PHP
Zend Framework前端控制器用法示例
2016/12/11 PHP
JavaScript学习笔记(一) js基本语法
2011/10/25 Javascript
分页栏的web标准实现
2011/11/01 Javascript
js/html光标定位的实现代码
2013/09/23 Javascript
简单的代码实现jquery定时器
2014/01/03 Javascript
基于JavaScript获取鼠标位置的各种方法
2015/12/16 Javascript
JS实现鼠标框选效果完整实例
2016/06/20 Javascript
jquery获取点击控件的绝对位置简单实例
2016/10/13 Javascript
Vue.js实现一个漂亮、灵活、可复用的提示组件示例
2017/03/17 Javascript
node koa2实现上传图片并且同步上传到七牛云存储
2017/07/31 Javascript
彻底搞懂JavaScript中的apply和call方法(必看)
2017/09/18 Javascript
vue使用axios上传文件(FormData)的方法
2019/04/14 Javascript
EasyUI 数据表格datagrid列自适应内容宽度的实现
2019/07/18 Javascript
[00:33]DOTA2上海特级锦标赛 CDEC战队宣传片
2016/03/04 DOTA
python实现查找excel里某一列重复数据并且剔除后打印的方法
2015/05/26 Python
Python实现利用最大公约数求三个正整数的最小公倍数示例
2017/09/30 Python
python的numpy模块安装不成功简单解决方法总结
2017/12/23 Python
浅谈python日志的配置文件路径问题
2018/04/28 Python
Python如何处理大数据?3个技巧效率提升攻略(推荐)
2019/04/15 Python
python网络应用开发知识点浅析
2019/05/28 Python
Python用类实现扑克牌发牌的示例代码
2020/06/01 Python
python中常用的数据结构介绍
2021/01/12 Python
HTML5 3D旋转相册的实现示例
2019/12/03 HTML / CSS
20岁生日感言
2014/01/13 职场文书
2014年乡镇植树节活动方案
2014/02/28 职场文书
三分钟英语演讲稿
2014/04/24 职场文书
2014党员民主评议个人总结
2014/09/10 职场文书
员工培训协议书
2014/09/15 职场文书
德能勤绩工作总结
2015/08/11 职场文书
小学英语教学经验交流材料
2015/11/02 职场文书
一文搞懂如何实现Go 超时控制
2021/03/30 Python
Go 语言结构实例分析
2021/07/04 Golang
springboot集成redis存对象乱码的问题及解决
2022/06/16 Java/Android
Spring Boot优化后启动速度快到飞起技巧示例
2022/07/23 Java/Android