jquery转盘抽奖功能实现


Posted in Javascript onNovember 13, 2015

 一、用到的素材

jquery转盘抽奖功能实现jquery转盘抽奖功能实现jquery转盘抽奖功能实现jquery转盘抽奖功能实现jquery转盘抽奖功能实现jquery转盘抽奖功能实现jquery转盘抽奖功能实现

二、代码如下,重点是js部分

<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>jQuery九宫格大转盘抽奖</title>
<style>
#lottery{width:570px;height:510px;margin:0px auto;border:4px solid #ba1809;}
#lottery table{background-color:yellow;}
#lottery table td{position:relative;width:190px;height:170px;text-align:center;color:#333;font-index:-999}
#lottery table td img{display:block;width:190px;height:170px;}
#lottery table td a{width:190px;height:170px;display:block;text-decoration:none;background:url(images/lottery1.jpg) no-repeat top center;}
#lottery table td a:hover{background-image:url(images/lottery2.jpg);}
#lottery table td.active .mask{display:block;}
.mask{
 width:100%;
 height:100%;
 position:absolute;
 left:0;
 top:0;
 background:url(images/mask.png) no-repeat;
 display:none;
}
</style>
</head>
<body class="keBody">
<!--效果html开始-->
<div id="lottery">
 <table border="0" cellpadding="0" cellspacing="0">
  <tr>
   <td class="lottery-unit lottery-unit-0"><img src="images/gift0.jpg"><div class="mask"></div></td>
   <td class="lottery-unit lottery-unit-1"><img src="images/gift1.jpg"><div class="mask"></div></td>
   <td class="lottery-unit lottery-unit-2"><img src="images/gift2.jpg"><div class="mask"></div></td>
  </tr>
  <tr>
   <td class="lottery-unit lottery-unit-7"><img src="images/gift7.jpg"><div class="mask"></div></td>
   <td><a href="#"></a></td>
   <td class="lottery-unit lottery-unit-3"><img src="images/gift3.jpg"><div class="mask"></div></td>
  </tr>
  <tr>
   <td class="lottery-unit lottery-unit-6"><img src="images/gift6.jpg"><div class="mask"></div></td>
   <td class="lottery-unit lottery-unit-5"><img src="images/gift5.jpg"><div class="mask"></div></td>
   <td class="lottery-unit lottery-unit-4"><img src="images/gift4.jpg"><div class="mask"></div></td>
  </tr>
 </table>
</div>

<script src="http://code.jquery.com/jquery-latest.js"></script>
<script type="text/javascript">
var lottery={
 index:-1, //当前转动到哪个位置,起点位置
 count:0, //总共有多少个位置
 timer:0, //setTimeout的ID,用clearTimeout清除
 speed:20, //初始转动速度
 times:0, //转动次数
 cycle:50, //转动基本次数:即至少需要转动多少次再进入抽奖环节
 prize:-1, //中奖位置
 init:function(id){
  if ($("#"+id).find(".lottery-unit").length>0) {
   $lottery = $("#"+id);
   $units = $lottery.find(".lottery-unit");
   this.obj = $lottery;
   this.count = $units.length;
   $lottery.find(".lottery-unit-"+this.index).addClass("active");
  };
 },
 roll:function(){
  var index = this.index;
  var count = this.count;
  var lottery = this.obj;
  $(lottery).find(".lottery-unit-"+index).removeClass("active");
  index += 1;
  if (index>count-1) {
   index = 0;
  };
  $(lottery).find(".lottery-unit-"+index).addClass("active");
  this.index=index;
  return false;
 },
 stop:function(index){
  this.prize=index;
  return false;
 }
};

function roll(){
 lottery.times += 1;
 lottery.roll();//转动过程调用的是lottery的roll方法,这里是第一次调用初始化
 if (lottery.times > lottery.cycle+10 && lottery.prize==lottery.index) {
  clearTimeout(lottery.timer);
  lottery.prize=-1;
  lottery.times=0;
  click=false;
 }else{
  if (lottery.times<lottery.cycle) {
   lottery.speed -= 10;
  }else if(lottery.times==lottery.cycle) {
   var index = Math.random()*(lottery.count)|0;
   lottery.prize = index;  
  }else{
   if (lottery.times > lottery.cycle+10 && ((lottery.prize==0 && lottery.index==7) || lottery.prize==lottery.index+1)) {
    lottery.speed += 110;
   }else{
    lottery.speed += 20;
   }
  }
  if (lottery.speed<40) {
   lottery.speed=40;
  };
  //console.log(lottery.times+'^^^^^^'+lottery.speed+'^^^^^^^'+lottery.prize);
  lottery.timer = setTimeout(roll,lottery.speed);//循环调用
 }
 return false;
}

var click=false;

window.onload=function(){
 lottery.init('lottery');
 $("#lottery a").click(function(){
  if (click) {//click控制一次抽奖过程中不能重复点击抽奖按钮,后面的点击不响应
   return false;
  }else{
   lottery.speed=100;
   roll(); //转圈过程不响应click事件,会将click置为false
   click=true; //一次抽奖完成后,设置click为true,可继续抽奖
   return false;
  }
 });
};
</script>
<!--效果html结束-->

</body>
</html>

效果如下:

jquery转盘抽奖功能实现

三、注意事项
.mask开始如下,用的是rgba,但是IE8不兼容,改为使用png图片background:url(images/mask.png) no-repeat;

.mask {
 width: 100%;
 height: 100%;
 position: absolute;
 left: 0;
 top: 0;
 background-color: rgba(252,211,4,0.5);
 display: none
}

希望大家可以从小编整理的这篇文章中有所收获,对大家实现抽奖功能有所帮助。

Javascript 相关文章推荐
封装好的省市地区联动控件附下载
Aug 13 Javascript
javascript Array.prototype.slice使用说明
Oct 11 Javascript
js replace正则表达式应用案例讲解
Jan 17 Javascript
举例讲解如何判断JavaScript中对象的类型
Apr 22 Javascript
在Node.js中使用Javascript Generators详解
May 05 Javascript
JavaScript队列、优先队列与循环队列
Nov 14 Javascript
JS中的Replace()传入函数时的用法详解
Sep 11 Javascript
微信小程序实现页面跳转传值以及获取值的方法分析
Dec 18 Javascript
angular2 ng2-file-upload上传示例代码
Aug 23 Javascript
对Vue beforeRouteEnter 的next执行时机详解
Aug 25 Javascript
vee-validate vue 2.0自定义表单验证的实例
Aug 28 Javascript
解决ng-repeat产生的ng-model中取不到值的问题
Oct 02 Javascript
javascript生成随机数方法汇总
Nov 12 #Javascript
js正则表达式验证邮件地址
Nov 12 #Javascript
每天一篇javascript学习小结(Boolean对象)
Nov 12 #Javascript
为何JS操作的href都是javascript:void(0);呢
Nov 12 #Javascript
基于jquery实现左右按钮点击的图片切换效果
Jan 27 #Javascript
js图片轮播效果实现代码
Apr 18 #Javascript
javascript伸缩菜单栏实现代码分享
Nov 12 #Javascript
You might like
一个捕获函数输出的函数
2007/02/14 PHP
PHP 加密与解密的斗争
2009/04/17 PHP
PHP利用func_get_args和func_num_args函数实现函数重载实例
2014/11/12 PHP
通用JS事件写法实现代码
2009/01/07 Javascript
JQuery之拖拽插件实现代码
2011/04/14 Javascript
jQuery + Flex 通过拖拽方式动态改变图片的代码
2011/08/03 Javascript
javascript获得服务器端控件的ID的实现代码
2011/12/28 Javascript
AngularJS的表单使用详解
2015/06/17 Javascript
浅谈$(document)和$(window)的区别
2015/07/15 Javascript
javascript实现方法调用与方法触发小结
2016/03/26 Javascript
javascript学习指南之回调问题
2016/04/23 Javascript
AngularJS指令详解及示例代码
2016/08/16 Javascript
vue.js入门教程之计算属性
2016/09/01 Javascript
vue2.0+webpack环境的构造过程
2016/11/08 Javascript
详解nodejs express下使用redis管理session
2017/04/24 NodeJs
彻底揭秘keep-alive原理(小结)
2019/05/05 Javascript
Vue数据绑定实例写法
2019/08/06 Javascript
layui radio单选限制下一个radio单选的实例
2019/09/03 Javascript
JS深入学习之数组对象排序操作示例
2020/05/01 Javascript
深入解析Python中的WSGI接口
2015/05/11 Python
Python实现控制台进度条功能
2016/01/04 Python
django静态文件加载的方法
2018/05/20 Python
在django中图片上传的格式校验及大小方法
2019/07/28 Python
Python中的sys.stdout.write实现打印刷新功能
2020/02/21 Python
python实现在线翻译功能
2020/03/03 Python
python基于exchange函数发送邮件过程详解
2020/11/06 Python
浅谈CSS3动画的回调处理
2016/07/21 HTML / CSS
html5中canvas学习笔记2-判断浏览器是否支持canvas
2013/01/06 HTML / CSS
Lookfantastic意大利官网:英国知名美妆购物网站
2019/05/31 全球购物
岗位职责定义及内容
2013/11/08 职场文书
生产副总岗位职责
2013/11/28 职场文书
求职教师自荐书
2014/06/19 职场文书
高中课前三分钟演讲稿
2014/08/18 职场文书
习近平在党的群众路线教育实践活动总结大会上的讲话全文
2014/10/25 职场文书
世界上超棒的8种逻辑思维
2019/08/06 职场文书
Vue中插槽slot的使用方法与应用场景详析
2021/06/08 Vue.js