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 相关文章推荐
Javascript &amp; DHTML 实例编程(教程)(三)初级实例篇1—上传文件控件实例
Jun 02 Javascript
jQuery版Tab标签切换
Mar 16 Javascript
js实现遮罩层弹出框的方法
Jan 15 Javascript
js仿淘宝和百度文库的评分功能
May 15 Javascript
实用又漂亮的BootstrapValidator表单验证插件
May 30 Javascript
微信小程序 开发工具快捷键整理
Oct 31 Javascript
mui上拉加载功能实例详解
Apr 13 Javascript
BootStrap Select清除选中的状态恢复默认状态
Jun 20 Javascript
Vue.js结合Ueditor富文本编辑器的实例代码
Jul 11 Javascript
基于JavaScript实现幸运抽奖页面
Jul 05 Javascript
cdn模式下vue的基本用法详解
Oct 07 Javascript
vue编写简单的购物车功能
Jan 08 Vue.js
对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
DC漫画《蝙蝠侠和猫女》图透 猫女怀孕老爷当爹
2020/04/09 欧美动漫
QueryPath PHP 中的jQuery
2010/04/11 PHP
php mssql扩展SQL查询中文字段名解决方法
2012/10/15 PHP
php检测url是否存在的方法
2015/04/14 PHP
PHP实现搜索地理位置及计算两点地理位置间距离的实例
2016/01/08 PHP
再谈PHP中单双引号的区别详解
2016/06/12 PHP
浅谈PHP发送HTTP请求的几种方式
2017/07/25 PHP
Jquery 1.42 checkbox 全选和反选代码
2010/03/27 Javascript
基于jquery实现的省市区级联无ajax
2013/09/24 Javascript
JavaScript中toString()方法的使用详解
2015/06/05 Javascript
jQuery移动web开发之页面跳转和加载外部页面的实现
2015/12/04 Javascript
浅析Javascript ES6中的原生Promise
2016/08/25 Javascript
什么是JavaScript注入攻击?
2016/09/14 Javascript
Bootstrap Modal遮罩弹出层(完整版)
2016/11/21 Javascript
基于JQuery和原生JavaScript实现网页定位导航特效
2017/04/03 jQuery
vue父组件向子组件(props)传递数据的方法
2018/01/02 Javascript
vue-router项目实战总结篇
2018/02/11 Javascript
微信小程序实现单选功能
2018/10/30 Javascript
Vue实现简易计算器
2020/02/25 Javascript
详解微信小程序「渲染层网络层错误」的解决方法
2021/01/06 Javascript
Python中AND、OR的一个使用小技巧
2015/02/18 Python
python2.6.6如何升级到python2.7.14
2018/04/08 Python
python3第三方爬虫库BeautifulSoup4安装教程
2018/06/19 Python
python实时监控cpu小工具
2018/06/21 Python
python创建与遍历List二维列表的方法
2019/08/16 Python
python 调用pyautogui 实时获取鼠标的位置、移动鼠标的方法
2019/08/27 Python
浅谈tensorflow中Dataset图片的批量读取及维度的操作详解
2020/01/20 Python
python爬虫泛滥的解决方法详解
2020/11/25 Python
Python虚拟环境virtualenv创建及使用过程图解
2020/12/08 Python
如何用H5实现一个触屏版的轮播器的实例
2017/01/09 HTML / CSS
UGG雪地靴德国官网:UGG德国
2016/11/19 全球购物
为什么需要版本控制?
2013/08/08 面试题
送餐员岗位职责范本
2014/02/21 职场文书
停车位租赁协议书
2014/09/24 职场文书
2015最新民情日记范文
2015/06/26 职场文书
在K8s上部署Redis集群的方法步骤
2021/04/27 Redis