利用Javascript实现简单的转盘抽奖


Posted in Javascript onFebruary 13, 2017

首先来看看接口说明: 

var _rotate = new iRotate('#div',{
 start : 0, //开始角度,可不写,默认0
 end :45, //结束角度
 time :5000, //持续时间,可不写,默认1000
 easing : 'easeOut', //动画形式,目前只有'linear'和'easeOut'两种,可不写,默认'easeOut'
 callback : function(){ //回调函数
  //this为当前对象
 }
});
_rotate.stop(function(){ //停止回调函数
 //this为当前对象
});

实现的效果图如下:

利用Javascript实现简单的转盘抽奖

利用Javascript实现简单的转盘抽奖

完整的示例代码如下:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>简单转盘效果</title>
<style>
#RotateDiv{border-radius:50px 0 50px 50px }
#RotateDiv,#RotateDiv2{ width: 50px;height: 50px; color: #fff;text-align: center; line-height: 50px; background: #444; position: relative; margin: 20px;border-radius:50px 0 50px 50px}
</style>
</head>

<body>
<p>举例子:</p>
<p> <button id="RotateBtn">开始抽奖</button> </p>
<div id="RotateDiv"></div>
<p>默认转动:</p>
<p> <button id="RotateBtn2">开始抽奖2</button> </p>
<div id="RotateDiv2"></div>

<script type="text/javascript">
window.iRotate = (function(w,d){
 function R(obj,json){
 this.obj = (typeof obj=='object') ? obj : d.querySelector(obj);
 this.startTime = Date.now();
 this.timer = null;
 this.rotate(json);
 };
 R.prototype = {
 rotate : function(json){
 var t = this,times = json['time'] || 1000;
 clearInterval(t.timer)
 t.timer = setInterval(function(){
 var changeTime = Date.now(),
 tm = times - Math.max(0,t.startTime - changeTime + times),
 value = Tween[json['easing'] || 'easeOut'](tm,+json['start'] || 0,json['end'] - (+json['start'] || 0),times);
 t.obj.style['transform'] = t.obj.style['-webkit-transform'] = 'rotate('+value%360+'deg)';
 t.obj.setAttribute('data-rotate',value%360)
 if(tm==times){
  clearInterval(t.timer);
  json.callback && json.callback.call(t.obj)
 }
 },10)
 },
 stop : function(fn){
 clearInterval(this.timer);
 fn && fn.call(this.obj)
 }
 };
 return R;
})(window,document);
var Tween = {linear: function (t, b, c, d){return c*t/d + b;},easeOut: function(t, b, c, d){return -c *(t/=d)*(t-2) + b;}}

//默认转动
;(function(){
 var off = true,off2 = true;
 RotateBtn.onclick = function(){
 if(!off) return //判断是否在旋转
 off = false
 new iRotate('#RotateDiv',{
 end :45+1800,
 time :5000,
 callback : function(){ //回调函数
  this.innerHTML = this.getAttribute('data-rotate')
  off = true
  }
 });
 }
 var r = null;
 function rotate2(){ //递归持续旋转
 r = new iRotate('#RotateDiv2',{
 start : 0,
 end :360,
 time :1000,
 easing : 'linear',
 callback : function(){
 rotate2()
 }
 });
 }
 rotate2()
 RotateBtn2.onclick = function(){
 if(!off2) return //判断是否在旋转
 off2 = false
 r.stop(); //停止之前的旋转
 new iRotate('#RotateDiv2',{
 start : RotateDiv2.getAttribute('data-rotate'),
 end :65+1800,
 time :5000,
 callback : function(){ //回调函数
  this.innerHTML = this.getAttribute('data-rotate')
  off2 = true
  }
 });
 }
})();
 
</script>

</body>
</html>

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流。

Javascript 相关文章推荐
5款Javascript颜色选择器
Oct 25 Javascript
js+xml生成级联下拉框代码
Jul 24 Javascript
JQuery中$.ajax()方法参数详解及应用
Dec 12 Javascript
PHPExcel中的一些常用方法汇总
Jan 23 Javascript
javascript十六进制及二进制转化的方法
May 06 Javascript
JavaScript与HTML的结合方法详解
Nov 23 Javascript
JS获取数组最大值、最小值及长度的方法
Nov 24 Javascript
jquery中$.fn和图片滚动效果实现的必备知识总结
Apr 21 jQuery
详解如何构建Angular项目目录结构
Jul 13 Javascript
vue实现在表格里,取每行的id的方法
Mar 09 Javascript
微信小程序学习笔记之函数定义、页面渲染图文详解
Mar 28 Javascript
Vue.js@2.6.10更新内置错误处机制Fundebug同步支持相应错误监控
May 13 Javascript
简单实现js倒计时功能
Feb 13 #Javascript
基于node.js依赖express解析post请求四种数据格式
Feb 13 #Javascript
js中小数向上取整数,向下取整数,四舍五入取整数的实现(必看篇)
Feb 13 #Javascript
Angularjs自定义指令实现三级联动 选择地理位置
Feb 13 #Javascript
基于jQuery代码实现圆形菜单展开收缩效果
Feb 13 #Javascript
JS中setTimeout和setInterval的最大延时值详解
Feb 13 #Javascript
Vue.js实现简单动态数据处理
Feb 13 #Javascript
You might like
神族 Protoss 历史背景
2020/03/14 星际争霸
社区(php&amp;&amp;mysql)四
2006/10/09 PHP
打造计数器DIY三步曲(上)
2006/10/09 PHP
php&amp;java(二)
2006/10/09 PHP
下载文件的点击数回填
2006/10/09 PHP
利用php实现禁用IE和火狐的缓存问题
2012/12/03 PHP
使用php+apc实现上传进度条且在IE7下不显示的问题解决方法
2013/04/25 PHP
phpmailer发送gmail邮件实例详解
2013/06/24 PHP
php+mysql开发的最简单在线题库(在线做题系统)完整案例
2019/03/30 PHP
PHP数组实际占用内存大小原理解析
2020/12/11 PHP
javascript indexOf函数使用说明
2008/07/03 Javascript
javascript 自动转到命名锚记
2009/01/10 Javascript
3款实用的在线JS代码工具(国外)
2012/03/15 Javascript
JSON键值对序列化和反序列化解析
2017/01/24 Javascript
js实现自定义路由
2017/02/04 Javascript
解决webpack -p压缩打包react报语法错误的方法
2017/07/03 Javascript
Angular 2父子组件数据传递之@ViewChild获取子组件详解
2017/07/04 Javascript
使用Node.js实现一个多人游戏服务器引擎
2019/03/13 Javascript
python分析作业提交情况
2017/11/22 Python
python中时间、日期、时间戳的转换的实现方法
2019/07/06 Python
python中的列表与元组的使用
2019/08/08 Python
pytorch获取vgg16-feature层输出的例子
2019/08/20 Python
Python3 获取文件属性的方式(时间、大小等)
2020/03/12 Python
css3实现平移效果(transfrom:translate)的示例
2020/11/13 HTML / CSS
美国艺术和工艺品商店:Hobby Lobby
2020/12/09 全球购物
软件配置管理有什么好处
2015/04/15 面试题
后勤人员自我评价怎么写
2013/09/19 职场文书
物业管理个人自我评价
2013/11/08 职场文书
国贸类专业毕业生的求职信分享
2013/12/08 职场文书
DIY手工制作经营店创业计划书
2014/02/01 职场文书
食品安全处置方案
2014/06/14 职场文书
数学教育专业求职信
2014/07/22 职场文书
2016学习医德医风心得体会
2016/01/25 职场文书
springboot使用Redis作缓存使用入门教程
2021/07/25 Redis
漫画「古见同学有交流障碍症」第25卷封面公开
2022/03/21 日漫
Ubuntu Server 安装Tomcat并配置systemctl
2022/04/28 Servers