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中的ajax缓存问题
Dec 19 Javascript
JS自调用匿名函数具体实现
Feb 11 Javascript
JavaScript日期时间格式化函数分享
May 05 Javascript
js文件包含的几种方式介绍
Sep 28 Javascript
JavaScript严格模式详解
Nov 18 Javascript
原生javascript实现分享到朋友圈功能 支持ios和android
May 11 Javascript
JS不用正则验证输入的字符串是否为空(包含空格)的实现代码
Jun 14 Javascript
Javascript缓存API
Jun 14 Javascript
Spring MVC中Ajax实现二级联动的简单实例
Jul 06 Javascript
js事件触发操作实例分析
Jun 21 Javascript
vue draggable resizable 实现可拖拽缩放的组件功能
Jul 15 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
dvwa+xampp搭建显示乱码的问题及解决方案
2015/08/23 PHP
thinkphp3.2点击刷新生成验证码
2016/02/16 PHP
CodeIgniter表单验证方法实例详解
2016/03/03 PHP
PHP版微信第三方实现一键登录及获取用户信息的方法
2016/10/14 PHP
PHP实现无限分类的实现方法
2016/11/14 PHP
php将html转为图片的实现方法
2017/05/19 PHP
PHP基于PDO实现的SQLite操作类【包含增删改查及事务等操作】
2017/06/21 PHP
jQuery源码中的chunker 正则过滤符分析
2012/07/31 Javascript
基于jquery库的tab新形式使用
2012/11/16 Javascript
基于JQuery实现分隔条的功能
2016/06/17 Javascript
JQuery中Ajax的操作完整例子
2017/03/07 Javascript
详解Vue CLI3 多页应用实践和源码设计
2018/08/30 Javascript
vue-cli3跨域配置的简单方法
2019/09/06 Javascript
webpack的pitching loader详解
2019/09/23 Javascript
关于layui的下拉搜索框异步加载数据的解决方法
2019/09/28 Javascript
vue keep-alive实现多组件嵌套中个别组件存活不销毁的操作
2020/10/30 Javascript
python在windows下创建隐藏窗口子进程的方法
2015/06/04 Python
尝试使用Python多线程抓取代理服务器IP地址的示例
2015/11/09 Python
Python通过命令开启http.server服务器的方法
2017/11/04 Python
Python面向对象程序设计OOP深入分析【构造函数,组合类,工具类等】
2019/01/05 Python
python爬虫实现中英翻译词典
2019/06/25 Python
wxpython实现按钮切换界面的方法
2019/11/19 Python
python编程进阶之类和对象用法实例分析
2020/02/21 Python
django使用graphql的实例
2020/09/02 Python
python 如何将office文件转换为PDF
2020/09/22 Python
HTML5在IE10、火狐下中文乱码问题的解决方法
2013/11/18 HTML / CSS
给排水工程师岗位职责
2013/11/21 职场文书
森林防火工作方案
2014/02/14 职场文书
五分钟演讲稿
2014/04/30 职场文书
缅怀革命先烈演讲稿
2014/05/14 职场文书
学校标语大全
2014/06/19 职场文书
片区教研活动总结
2014/07/02 职场文书
十佳标兵事迹材料
2014/08/18 职场文书
岳麓书院导游词
2015/02/03 职场文书
预备党员群众意见
2015/06/01 职场文书
vue本地构建热更新卡顿的问题“75 advanced module optimization”完美解决方案
2022/08/05 Vue.js