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 相关文章推荐
jquery入门—访问DOM对象方法
Jan 07 Javascript
jquery如何判断表格同一列不同行input数据是否重复
May 14 Javascript
js判断上传文件类型判断FileUpload文件类型代码
May 20 Javascript
JSON.stringify转换JSON时日期时间不准确的解决方法
Aug 08 Javascript
js解决movebox移动问题
Mar 29 Javascript
用JS生成UUID的方法实例
Mar 30 Javascript
js实现非常棒的弹出div
Oct 06 Javascript
Canvas + JavaScript 制作图片粒子效果
Feb 08 Javascript
老生常谈js数据类型
Aug 03 Javascript
JavaScript设计模式之调停者模式实例详解
Feb 03 Javascript
vue缓存的keepalive页面刷新数据的方法
Apr 23 Javascript
js中console在一行内打印字符串和对象的方法
Sep 10 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
详细介绍:Apache+PHP+MySQL配置攻略
2006/09/05 PHP
PHP笔记之:日期函数的使用介绍
2013/04/24 PHP
PHP简单判断手机设备的方法
2016/08/23 PHP
PHP从二维数组得到N层分类树的实现代码
2016/10/11 PHP
Javascript 读书笔记索引贴
2010/01/11 Javascript
javaScript让文本框内的最后一个文字的后面获得焦点实现代码
2013/01/06 Javascript
js 用CreateElement动态创建标签示例
2013/11/20 Javascript
jquery选择器之属性过滤选择器详解
2014/01/27 Javascript
js中iframe调用父页面的方法
2014/10/30 Javascript
jQuery+ajax+asp.net获取Json值的方法
2016/06/08 Javascript
js html5 css俄罗斯方块游戏再现
2016/10/17 Javascript
JS如何设置iOS中微信浏览器的title
2016/11/22 Javascript
Vue.js实现微信过渡动画左右切换效果
2017/06/13 Javascript
ionic 3.0+ 项目搭建运行环境的教程
2017/08/09 Javascript
微信小程序 循环及嵌套循环的使用总结
2017/09/26 Javascript
js 客户端打印html 并且去掉页眉、页脚的实例
2017/11/03 Javascript
迅速了解一下ES10中Object.fromEntries的用法使用
2019/03/05 Javascript
原生JavaScript实现购物车
2021/01/10 Javascript
简单使用Python自动生成文章
2014/12/25 Python
使用Python的urllib2模块处理url和图片的技巧两则
2016/02/18 Python
PyQt5每天必学之组合框
2018/04/20 Python
Python应用库大全总结
2018/05/30 Python
Django对接支付宝实现支付宝充值金币功能示例
2019/12/17 Python
Python实现电视里的5毛特效实例代码详解
2020/05/15 Python
python 检测nginx服务邮件报警的脚本
2020/12/31 Python
CSS3的颜色渐变效果的示例代码
2017/09/29 HTML / CSS
DTD的含义以及作用
2014/01/26 面试题
数控技术专业推荐信
2013/11/01 职场文书
学校安全教育制度
2014/01/31 职场文书
岗位廉洁从业承诺书
2014/03/28 职场文书
焦裕禄精神心得体会
2014/09/02 职场文书
婚前协议书范本两则
2014/10/16 职场文书
环卫工作汇报材料
2014/10/28 职场文书
入党后的感想
2015/08/10 职场文书
Python 实现定积分与二重定积分的操作
2021/05/26 Python
豆瓣2021评分最高动画剧集-豆瓣评分最高的动画剧集2021
2022/03/18 日漫