使用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 相关文章推荐
Ext.get() 和 Ext.query()组合使用实现最灵活的取元素方式
Sep 26 Javascript
基于jquery实现拆分姓名的方法(纯JS版)
May 08 Javascript
jquery实现在页面加载的时自动为日期插件添加当前日期
Aug 20 Javascript
JavaScript数据类型之基本类型和引用类型的值
Apr 01 Javascript
JS实现CheckBox复选框全选全不选功能
May 06 Javascript
jquery.gridrotator实现响应式图片展示画廊效果
Jun 23 Javascript
jQuery仿360导航页图标拖动排序效果代码分享
Aug 24 Javascript
解决前端跨域问题方案汇总
Nov 20 Javascript
node基于puppeteer模拟登录抓取页面的实现
May 09 Javascript
详解写好JS条件语句的5条守则
Feb 28 Javascript
小白教程|一小时上手最流行的前端框架vue(推荐)
Apr 10 Javascript
vue实现滑动解锁功能
Mar 03 Vue.js
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开源建站平台小结
2010/04/22 PHP
ThinkPHP实现附件上传功能
2017/04/27 PHP
PHP数据库操作三:redis用法分析
2017/08/16 PHP
用于自动添加Digg This!按钮的JavaScript
2006/12/23 Javascript
javascript 写类方式之八
2009/07/05 Javascript
JavaScript CSS修改学习第二章 样式
2010/02/19 Javascript
Javascript load Page,load css,load js实现代码
2010/03/31 Javascript
基于Jquery的仿照flash放大图片效果代码
2011/03/16 Javascript
详解js私有作用域中创建特权方法
2016/01/25 Javascript
jQuery的框架介绍
2016/05/11 Javascript
微信公众号开发 自定义菜单跳转页面并获取用户信息实例详解
2016/12/08 Javascript
Ajax实现不刷新取最新商品
2017/03/01 Javascript
node.js中fs.stat与fs.fstat的区别详解
2017/06/01 Javascript
vue2.0 实现导航守卫的具体用法(路由守卫)
2018/05/17 Javascript
express中static中间件的具体使用方法
2019/10/17 Javascript
小程序实现简单语音聊天的示例代码
2020/07/24 Javascript
vue 计算属性和侦听器的使用小结
2021/01/25 Vue.js
详解Python中的strftime()方法的使用
2015/05/22 Python
Python中的支持向量机SVM的使用(附实例代码)
2019/06/26 Python
python批量修改图片尺寸,并保存指定路径的实现方法
2019/07/04 Python
python每天定时运行某程序代码
2019/08/16 Python
python 进程的几种创建方式详解
2019/08/29 Python
一款基于css3麻将筛子3D翻转特效的实例教程
2014/12/31 HTML / CSS
Expedia丹麦:全球领先的旅游网站
2018/03/18 全球购物
戴森香港官方网站:Dyson香港
2021/02/11 全球购物
校班主任推荐信范文
2013/12/03 职场文书
个人自荐信
2013/12/05 职场文书
农村产权制度改革实施方案
2014/03/21 职场文书
党支部换届选举方案
2014/05/08 职场文书
乡镇个人对照检查材料
2014/08/22 职场文书
总经理岗位职责范本
2015/04/01 职场文书
反邪教观后感
2015/06/11 职场文书
spring项目中切面及AOP的使用方法
2021/06/26 Java/Android
分析Java中Map的遍历性能问题
2021/06/26 Java/Android
超越Nginx的Web服务器caddy优雅用法
2022/06/21 Servers
Python+SeaTable实现计算两个日期间的工作日天数
2022/07/07 Python