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 substr、substring和slice使用说明小记
Sep 15 Javascript
jquery $(&quot;#variable&quot;) 循环改变variable的值示例
Feb 23 Javascript
浅谈node.js中async异步编程
Oct 22 Javascript
JavaScript类型系统之基本数据类型与包装类型
Jan 06 Javascript
Vue.js基础知识小结
Jan 13 Javascript
Angular2入门教程之模块和组件详解
May 28 Javascript
js中call()和apply()改变指针问题的讲解
Jan 17 Javascript
微信小程序实现的picker多级联动功能示例
May 23 Javascript
在Vue.js中使用TypeScript的方法
Mar 19 Javascript
微信小程序的引导页实现代码
Jun 24 Javascript
解决VUE-Router 同一页面第二次进入不刷新的问题
Jul 22 Javascript
js实现电灯开关效果
Jan 19 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
类的另类用法--数据的封装
2006/10/09 PHP
php入门小知识
2008/03/24 PHP
php编写一个简单的路由类
2011/04/13 PHP
解析CodeIgniter自定义配置文件
2013/06/18 PHP
浅析PHP原理之变量分离/引用(Variables Separation)
2013/08/09 PHP
几道坑人的PHP面试题 试试看看你会不会也中招
2014/08/19 PHP
PHP Callable强制指定回调类型的方法
2016/08/30 PHP
PHP+Mysql无刷新问答评论系统(源码)
2016/12/20 PHP
thinkphp下MySQL数据库读写分离代码剖析
2017/04/18 PHP
微信公众号实现会员卡领取功能
2017/06/08 PHP
Laravel框架实现redis集群的方法分析
2017/09/14 PHP
浅谈PHP封装CURL
2019/03/06 PHP
10个基于jQuery或JavaScript的WYSIWYG 编辑器整理
2010/05/06 Javascript
关于递归运算的顺序测试代码
2011/11/30 Javascript
输入自动提示搜索提示功能的javascript:sugggestion.js
2013/09/02 Javascript
javascript实现促销倒计时+fixed固定在底部
2013/09/18 Javascript
jQuery中的pushStack实现原理和应用实例
2015/02/03 Javascript
有关Promises异步问题详解
2015/11/13 Javascript
Jquery轮播效果实现过程解析
2016/03/30 Javascript
Extjs表单输入框异步校验的插件实现方法
2017/03/20 Javascript
JavaScript简单计算人的年龄示例
2017/04/15 Javascript
微信小程序获取用户信息并保存登录状态详解
2019/05/10 Javascript
微信小程序canvas截取任意形状的实现代码
2020/01/13 Javascript
Vue实现附件上传功能
2020/05/28 Javascript
[38:32]完美世界DOTA2联赛循环赛 Forest vs DM 第二场 11.06
2020/11/06 DOTA
Python OpenCV对本地视频文件进行分帧保存的实例
2019/01/08 Python
Python实现敏感词过滤的4种方法
2020/09/12 Python
如何利用Python matplotlib绘制雷达图
2020/12/21 Python
Bibloo罗马尼亚网站:女装、男装、童装及鞋子和配饰
2019/07/20 全球购物
电脑教师的自我评价
2013/12/18 职场文书
中层竞聘演讲稿
2014/01/09 职场文书
卖房协议书样本
2014/10/30 职场文书
医院病假条范文
2015/08/17 职场文书
JS不要再到处使用绝对等于运算符了
2021/04/30 Javascript
OpenCV实现普通阈值
2021/11/17 Java/Android
利用js实现简单开关灯代码
2021/11/23 Javascript