利用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 相关文章推荐
跟着JQuery API学Jquery 之二 属性
Apr 09 Javascript
js对象的复制继承实例
Jan 10 Javascript
JavaScript实现自动生成网页元素功能(按钮、文本等)
Nov 21 Javascript
AngularJS 模型详细介绍及实例代码
Jul 27 Javascript
jQuery轮播图效果精简版完整示例
Sep 04 Javascript
关于Vue.js一些问题和思考学习笔记(2)
Dec 02 Javascript
vue实现添加标签demo示例代码
Jan 21 Javascript
JavaScript实现form表单的多文件上传
Mar 27 Javascript
浅谈Vue.js中的v-on(事件处理)
Sep 05 Javascript
vue2实现搜索结果中的搜索关键字高亮的代码
Aug 29 Javascript
webuploader分片上传的实现代码(前后端分离)
Sep 10 Javascript
vue项目打包部署_nginx代理访问方法详解
Sep 20 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
PHP连接局域网MYSQL数据库的简单实例
2013/08/26 PHP
ThinkPHP连接数据库的方式汇总
2014/12/05 PHP
Zend Framework入门知识点小结
2016/03/19 PHP
Nigma vs Liquid BO3 第一场2.13
2021/03/10 DOTA
网站页面自动跳转实现方法PHP、JSP(下)
2010/08/01 Javascript
基于JQuery的抓取博客园首页RSS的代码
2011/12/01 Javascript
js简单抽奖代码
2015/01/16 Javascript
jquery插件corner实现圆角边框的方法
2015/03/09 Javascript
超级给力的JavaScript的React框架入门教程
2015/07/02 Javascript
纯js实现手风琴效果
2020/04/17 Javascript
JQuery DIV 动态隐藏和显示的方法
2016/06/23 Javascript
详解创建自定义的Angular Schematics
2018/06/06 Javascript
微信小程序冒泡事件及其阻止方法实例分析
2018/12/06 Javascript
页面内锚点定位及跳转方法总结(推荐)
2019/04/24 Javascript
使用异步组件优化Vue应用程序的性能
2019/04/28 Javascript
如何正确理解vue中的key详解
2019/11/02 Javascript
[59:53]DOTA2-DPC中国联赛 正赛 VG vs Elephant BO3 第二场 3月6日
2021/03/11 DOTA
python进程管理工具supervisor使用实例
2014/09/17 Python
python3生成随机数实例
2014/10/20 Python
python sorted函数原理解析及练习
2020/02/10 Python
python 串行执行和并行执行实例
2020/04/30 Python
将tf.batch_matmul替换成tf.matmul的实现
2020/06/18 Python
python 读取.nii格式图像实例
2020/07/01 Python
HTML5 Canvas实现玫瑰曲线和心形图案的代码实例
2014/04/10 HTML / CSS
联想马亚西亚官方网站:Lenovo Malaysia
2018/09/19 全球购物
C#笔试题集合
2013/06/21 面试题
腾讯公司的一个sql题
2013/01/22 面试题
视光学专业毕业生推荐信
2013/10/28 职场文书
一个大学生十年的职业规划
2014/01/17 职场文书
青年教师典范事迹材料
2014/01/31 职场文书
我的小天地教学反思
2014/04/30 职场文书
暑期社会实践个人总结
2015/03/06 职场文书
入党转正介绍人意见
2015/06/03 职场文书
PHP实现rar解压读取扩展包小结
2021/06/03 PHP
面试中canvas绘制图片模糊图片问题处理
2022/03/13 Javascript
CSS 左边固定宽右边自适应的6种方法
2022/05/15 HTML / CSS