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 相关文章推荐
phpwind放自动注册方法
Dec 02 Javascript
javascript 建设银行登陆键盘
Jun 10 Javascript
JavaScript的事件绑定(方便不支持js的时候)
Oct 01 Javascript
javascript 寻找错误方法整理
Jun 15 Javascript
JavaScript中的普通函数与构造函数比较
Apr 07 Javascript
18个非常棒的jQuery代码片段
Nov 02 Javascript
flag和jq on 的绑定多个对象和方法(必看)
Feb 27 Javascript
AngularJS基于factory创建自定义服务的方法详解
May 25 Javascript
图片加载完成再执行事件的实例
Nov 16 Javascript
layui从数据库中获取复选框的值并默认选中方法
Aug 15 Javascript
小程序实现展开/收起的效果示例
Sep 22 Javascript
Vue2.0搭建脚手架
Mar 13 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
PHP生成随机密码类分享
2014/06/25 PHP
PHP依赖倒置(Dependency Injection)代码实例
2014/10/11 PHP
php中使用key,value,current,next和prev函数遍历数组的方法
2015/03/17 PHP
PHP常用的三种设计模式
2017/02/17 PHP
ThinkPHP+EasyUI之ComboTree中的会计科目树形菜单实现方法
2017/06/09 PHP
php接口实现拖拽排序功能
2018/04/23 PHP
Thinkphp框架+Layui实现图片/文件上传功能分析
2020/02/07 PHP
TP5框架页面跳转样式操作示例
2020/04/05 PHP
JavaScript学习笔记(一) js基本语法
2011/10/25 Javascript
jQuery插件开发全解析
2012/10/10 Javascript
jquery iframe操作详细解析
2013/11/20 Javascript
JS使用ajax方法获取指定url的head信息中指定字段值的方法
2015/03/24 Javascript
JQuery中两个ul标签的li互相移动实现方法
2015/05/18 Javascript
JS实现探测网站链接的方法【测试可用】
2016/11/08 Javascript
vue实现移动端图片裁剪上传功能
2020/08/18 Javascript
jQury Ajax使用Token验证身份实例代码
2017/09/22 Javascript
JavaScript 跨域之POST实现方法
2018/05/07 Javascript
使用vue开发移动端管理后台的注意事项
2019/03/07 Javascript
详解bootstrap-fileinput文件上传控件的亲身实践
2019/03/21 Javascript
Vue实现Layui的集成方法步骤
2020/04/10 Javascript
vue中element 的upload组件发送请求给后端操作
2020/09/07 Javascript
Fabric 应用案例
2016/08/28 Python
对pandas中apply函数的用法详解
2018/04/10 Python
python实现远程控制电脑
2019/05/23 Python
基于python中__add__函数的用法
2019/11/25 Python
Python reshape的用法及多个二维数组合并为三维数组的实例
2020/02/07 Python
Python字符串hashlib加密模块使用案例
2020/03/10 Python
基于SpringBoot构造器注入循环依赖及解决方式
2020/04/26 Python
C语言开发工程师测试题
2016/12/20 面试题
成考报名单位证明范本
2014/01/16 职场文书
中学教师师德师风演讲稿
2014/08/22 职场文书
卖车协议书范本4篇
2014/10/01 职场文书
团队会宣传标语
2014/10/09 职场文书
2015年支教教师工作总结
2015/07/22 职场文书
恶魔之树最顶端的三颗果实 震震果实上榜,第一可以制造岩浆
2022/03/18 日漫
Shell中的单中括号和双中括号的用法详解
2022/12/24 Servers