使用jQuery Rotare实现微信大转盘抽奖功能


Posted in Javascript onJune 20, 2016

很多公司到了年底都会做一些抽奖活动来刺激、吸引、粘住客户,比如抽奖转盘活动。

前几天用一个jqueryRotate插件实现了转盘的效果。比起那些很炫丽的flash是稍逊点,但也基本实现了需求

效果图:

使用jQuery Rotare实现微信大转盘抽奖功能

实现这个其实蛮简单的,转动的效果用的jqueryRotate插件,所以只要判断每个奖荐对应的角度,然后设置指针的转动角度就可以了。比如关键的是jqueryRotate这个插件的用法。

jqueryRotate的资料:

支持Internet Explorer 6.0+ 、Firefox 2.0 、Safari 3 、Opera 9 、Google Chrome,高级浏览器下使用Transform,低版本ie使用VML实现

google code地址:http://code.google.com/p/jqueryrotate/

调用和方法:

$(el).rotate({  

angle:0, //起始角度


 animateTo:180, //结束的角度


 duration:500, //转动时间


 callback:function(){}, //回调函数


 easing: $.easing.easeInOutExpo //定义运动的效果,需要引用jquery.easing.min.js的文件
  })

$(el).rotate(45); //直接这样子调用的话就是变换角度

$(el).getRotateAngle(); //返回对象当前的角度

$(el).stopRotare(); //停止旋转动画

另外可以更方便的通过调用$(el).rotateRight()和$(el).rotateLeft()来分别向右旋转90度和向左旋转90度。

很简单吧,各种example可以看这里:http://code.google.com/p/jqueryrotate/wiki/Examples

下面是用jqueryRotate实现的抽奖转盘页面:

<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>转盘</title>
<style>
 *{padding:0;margin:0}
 body{
  text-align:center
 }
 .ly-plate{
  position:relative;
  width:509px;
  height:509px;
  margin: 50px auto;
 }
 .rotate-bg{
  width:509px;
  height:509px;
  background:url(ly-plate.png);
  position:absolute;
  top:0;
  left:0
 }
 .ly-plate div.lottery-star{
  width:214px;
  height:214px;
  position:absolute;
  top:150px;
  left:147px;
  /*text-indent:-999em;
  overflow:hidden;
  background:url(rotate-static.png);
  -webkit-transform:rotate(0deg);*/
  outline:none
 }
 .ly-plate div.lottery-star #lotteryBtn{
  cursor: pointer;
  position: absolute;
  top:0;
  left:0;
  *left:-107px
 }
</style>
</head>
<body>
 <div class="ly-plate">
  <div class="rotate-bg"></div>
  <div class="lottery-star"><img src="rotate-static.png" id="lotteryBtn"></div>
 </div>
</body>
<script src="jquery-1.7.2.min.js"></script>
<script src="jQueryRotate.2.2.js"></script>

<script>
$(function(){
 var timeOut = function(){ //超时函数
  $("#lotteryBtn").rotate({
   angle:0, 
   duration: 10000, 
   animateTo: 2160, //这里是设置请求超时后返回的角度,所以应该还是回到最原始的位置,2160是因为我要让它转6圈,就是360*6得来的
   callback:function(){
    alert('网络超时')
   }
  }); 
 }; 
 var rotateFunc = function(awards,angle,text){ //awards:奖项,angle:奖项对应的角度,text:提示文字
  $('#lotteryBtn').stopRotate();
  $("#lotteryBtn").rotate({
   angle:0, 
   duration: 5000, 
   animateTo: angle+1440, //angle是图片上各奖项对应的角度,1440是我要让指针旋转4圈。所以最后的结束的角度就是这样子^^
   callback:function(){
    alert(text)
   }
  }); 
 };
 
 $("#lotteryBtn").rotate({ 
  bind: 
   { 
   click: function(){
    var time = [0,1];
     time = time[Math.floor(Math.random()*time.length)];
    if(time==0){
     timeOut(); //网络超时
    }
    if(time==1){
     var data = [1,2,3,0]; //返回的数组
      data = data[Math.floor(Math.random()*data.length)];
     if(data==1){
      rotateFunc(1,157,'恭喜您抽中的一等奖')
     }
     if(data==2){
      rotateFunc(2,247,'恭喜您抽中的二等奖')
     }
     if(data==3){
      rotateFunc(3,22,'恭喜您抽中的三等奖')
     }
     if(data==0){
      var angle = [67,112,202,292,337];
       angle = angle[Math.floor(Math.random()*angle.length)]
      rotateFunc(0,angle,'很遗憾,这次您未抽中奖')
     }
    }
   }
   } 
  
 });
 
})
</script>
</html>

这里的time跟data是要从后台获取的,但这里只是静态页面,所以我就利用了random随机数来尽量模拟抽奖的过程了。

time参数表示从后台请求是否成功,0是请求超时,1是请求成功(成功后再判断返回的值是什么样);

data就是请求返回的数据,1,2,3表示一二三等奖,0是不中奖,根据返回的数据,再去设置指针旋转的角度。

因为这个图片上的角度无法用公式计算出来,所以只能这样子计算出来后定死。

如果比较规则的话,应该可以用公式计算。

其实难得不在前台,别人写好的插件,我们拿来用就好,真正难的是在后台,定一个什么样的规则,搞一个什么样的算法,大家去思考去吧~~呵呵~~

以上就是本文的全部内容,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
javascript hashtable实现代码
Oct 13 Javascript
JavaScript汉诺塔问题解决方法
Apr 21 Javascript
jquery动态增加删减表格行特效
Nov 20 Javascript
angularjs在ng-repeat中使用ng-model遇到的问题
Jan 21 Javascript
详解vue.js数据传递以及数据分发slot
Jan 20 Javascript
浅谈mvvm-simple双向绑定简单实现
Apr 18 Javascript
Vue中的scoped实现原理及穿透方法
May 15 Javascript
解决微信小程序中转换时间格式IOS不兼容的问题
Feb 15 Javascript
微信小程序单选radio及多选checkbox按钮用法示例
Apr 30 Javascript
js实现坦克移动小游戏
Oct 28 Javascript
解决vue语法会有延迟加载显现{{xxx}}的问题
Nov 14 Javascript
js实现模拟购物商城案例
May 18 Javascript
JS实现弹出居中的模式窗口示例
Jun 20 #Javascript
jQuery筛选数组之grep、each、inArray、map的用法及遍历json对象
Jun 20 #Javascript
解决jQuery ajax请求在IE6中莫名中断的问题
Jun 20 #Javascript
indexedDB bootstrap angularjs之 MVC DOMO (应用示例)
Jun 20 #Javascript
JS控制层作圆周运动的方法
Jun 20 #Javascript
简单实现jQuery进度条轮播实例代码
Jun 20 #Javascript
移动端H5开发 Turn.js实现很棒的翻书效果
Jun 20 #Javascript
You might like
PHP+ACCESS 文章管理程序代码
2010/06/21 PHP
PHP笔记之:基于面向对象设计的详解
2013/05/14 PHP
php笔记之:数据类型与常量的使用分析
2013/05/14 PHP
C/S和B/S两种架构区别与优缺点分析
2014/10/23 PHP
php获得客户端浏览器名称及版本的方法(基于ECShop函数)
2015/12/23 PHP
php opendir()列出目录下所有文件的实例代码
2016/10/02 PHP
JavaScript脚本语言在网页中的简单应用
2007/05/13 Javascript
Jquery插件 easyUI属性汇总
2011/01/19 Javascript
jquery之超简单的div显示和隐藏特效demo(分享)
2013/07/09 Javascript
jQuery之DOM对象和jQuery对象的转换与区别分析
2015/01/08 Javascript
微信小程序 新建登录页并实现tabBar隐藏
2017/06/13 Javascript
Django使用多数据库的方法
2017/09/06 Javascript
初识 Vue.js 中的 *.Vue文件
2017/11/22 Javascript
vue的一个分页组件的示例代码
2017/12/25 Javascript
使用Node搭建reactSSR服务端渲染架构
2018/08/30 Javascript
Electron-vue脚手架改造vue项目的方法
2018/10/22 Javascript
如何使用pm2快速将项目部署到远程服务器
2019/03/12 Javascript
详解基于React.js和Node.js的SSR实现方案
2019/03/21 Javascript
vue 中使用 watch 出现了如下的报错的原因分析
2019/05/21 Javascript
[38:41]2014 DOTA2国际邀请赛中国区预选赛 LGD VS CNB
2014/05/22 DOTA
python获取android设备的GPS信息脚本分享
2015/03/06 Python
在Windows系统上搭建Nginx+Python+MySQL环境的教程
2015/12/25 Python
python3 selenium 切换窗口的几种方法小结
2018/05/21 Python
Python操作redis实例小结【String、Hash、List、Set等】
2019/05/16 Python
python多线程同步之文件读写控制
2021/02/25 Python
Python操作Mongodb数据库的方法小结
2019/09/10 Python
python+opencv边缘提取与各函数参数解析
2020/03/09 Python
CSS3 圆角效果
2009/07/15 HTML / CSS
班组长安全生产职责
2013/12/16 职场文书
求职信需要的五点内容
2014/02/01 职场文书
表彰大会策划方案
2014/05/13 职场文书
食堂标语大全
2014/06/11 职场文书
2015年优质护理服务工作总结
2015/04/08 职场文书
道歉的话语大全
2015/05/12 职场文书
python执行js代码的方法
2021/05/13 Python
Python内置的数据类型及使用方法
2022/04/13 Python