jquery抽奖插件+概率计算
写了一个抽奖的jquery插件和计算概率的方法, 结合起来就是一个简单的概率抽奖, 不过实际项目中基本不会把抽奖概率的计算放在前端处理~。
lottery.jquery.js
$.fn.extend({
lottery: function(conf) {
var def = {
lotIndex: 0, // 抽中的索引
item: "li",
onClass: "on",
speedStart: 50, // 初始速度
speedEnd: 400, // 结束速度
speedType: "", // 默认匀速 可选 change: 减速
overTime: 5000, // 抽奖时长(最短)
overCallback: function() {} // 抽奖结束后的回调函数
};
if (typeof conf.lotIndex === "undefined") {
return
}
def = $.extend({}, def, conf);
var $lotteryList = $(this),
lotteryControl = {};
lotteryControl = {
$el: $lotteryList,
item: def.item,
itemLen: 0,
index: 0,
speedType: def.speedType,
speedStart: def.speedStart,
speed: def.speedStart,
speedEnd: def.speedEnd,
a: 0, // 加速度
nowTime: 0, // 抽奖已进行时间
overFlag: false, // 抽奖是否结束
onClass: def.onClass,
lotIndex: def.lotIndex,
overTime: def.overTime,
overCallback: def.overCallback,
init: function() {
this.$items = this.$el.find(this.item);
this.itemLen = this.$items.length;
this.a = (this.speedEnd - this.speed) / this.overTime;
if (this.lotIndex >= this.itemLen) {
this.error();
} else {
this.start();
}
},
start: function() {
var self = this;
this.play();
this.setStop();
switch (this.speedType) {
case "change":
this.changeSpeed();
break;
}
},
play: function() {
var $items = this.$items;
$items.eq(this.index - 1).removeClass(this.onClass);
$items.eq(this.index).addClass(this.onClass);
if (this.overFlag && this.index === this.lotIndex) {
this.stop();
} else {
this.next();
}
},
next: function() {
var self = this;
this.index++;
this.index = this.index === this.itemLen ? 0 : this.index;
setTimeout(function() {
self.play();
}, this.speed);
},
changeSpeed: function() {
var self = this;
setTimeout(function() {
self.nowTime += self.speed;
if (!self.overFlag) {
self.speed = self.speedStart + self.a * self.nowTime;
self.changeSpeed();
}
}, this.speed);
},
setStop: function() {
var self = this;
setTimeout(function() {
self.overFlag = true;
}, this.overTime);
},
stop: function() {
this.overCallback();
},
error: function() {
console.log("error.......");
}
};
lotteryControl.init( );
return this;
}
});
概率计算
function Probability(conf) {
this.probArr = conf || [];
this.range = [],
this.len = this.probArr.length;
if (this.len > 0) {
this.init();
}
}
Probability.prototype = {
init: function() {
this.setRange();
},
get: function() {
var len = this.len,
range = this.range,
last,
randNum,
i = 0;
if (len === 0) {
return;
} else if(len === 1) {
return 0;
}
last = range[len -1];
randNum = Math.floor(last* Math.random());
for (; i < len; i++) {
if (randNum < range[i]) {
break;
}
}
return i;
},
setRange: function() {
var range = [],
probArr = this.probArr,
i = 0,
len = probArr.length;
for(; i<len; i++) {
var now = probArr[i],
last = range[i-1] || 0;
range.push(now+last);
}
this.range = range;
}
};
jquery抽奖插件+概率计算的更多相关文章
- jQuery抽奖插件 jQueryRotate
实现代码 网页中引用 <script type="text/javascript" src="js/jquery.min.js"></scri ...
- 25款顶级的jQuery表格插件
jQuery 表格插件可以让你创建各种各样的表格布局,表格布局是报纸和杂志中最常见的布局,现在的网站中也很常见,在这篇文章中,我向大家推荐25个jQuery 的表格插件,你可以任意控制表格的行和列,用 ...
- asp.net 实现在线打印功能,jQuery打印插件PrintArea实现自动分页
使用的组件:jQuery打印插件PrintArea,有兴趣的可以研究一下. 使用方法略过,这里将介绍如何实现打印多页是可以分页. 现在提供两种方法思路: 1.根据特定的打印机型号和使用的纸张类型,然后 ...
- 15 个最佳的 jQuery 表格插件
现如今,网站开发设计的需求会要求自动适应所有移动设备,即响应式网站: 在开发网站时必须考虑对平板设备融合 fluid(流)和自适应性特点. 大多数网站设计要靠margins, guides, rows ...
- jQuery 表格插件25
jQuery 表格插件可以让你创建各种各样的表格布局,表格布局是报纸和杂志中最常见的布局,现在的网站中也很常见,在这篇文章中,我向大家推荐25个jQuery 的表格插件,你可以任意控制表格的行和列,用 ...
- Datatables快速入门开发--一款好用的JQuery表格插件
博主是一个java后端程序员小白,前端技术会用但不精通,做后台的一些功能经常要涉及表格的展示,分页,搜索,排序等等一系列功能,在经历了一段时间的原始手段,开始接触并使用Datatables,一个jqu ...
- JQuery表格插件
http://www.datatables.club/example/#styling Datatables快速入门开发--一款好用的JQuery表格插件 博主是一个java后端程序员,前端技术会 ...
- 25个顶级的jQuery表格插件
jQuery 表格插件可以让你创建各种各样的表格布局,表格布局是报纸和杂志中最常见的布局,现在的网站中也很常见,在这篇文章中,我向大家推荐25个jQuery 的表格插件,你可以任意控制表格的行和列,用 ...
- jQuery旋转插件—rotate-摘自网友
jQuery旋转插件—rotate 时间:2013年01月03日作者:愚人码头查看次数:5,660 views评论次数:6条评论 网上发现一个很有意思的jQuery旋转插件,支持Internet Ex ...
随机推荐
- JQuery- JQuery学习
jQuery与JavaScript加载页面的区别 1.JavaScript传统的方式页面加载会存在覆盖问题,加载比jQuery慢(整个页面加载完毕<包含里面的其他内容,比如图片>) 2.j ...
- 用eclipse写xml文件
1. 2.把写好的xml文件粘贴到src文件夹中.
- vs2015配置boost c++
参考:https://blog.csdn.net/zengraoli/article/details/70187556 https://blog.csdn.net/misterfm/article/d ...
- Jquery 取值,赋值学习总结
<h2>获取和设置文本框值:</h2> <input type="button" value="赋值文件框" id="v ...
- iframe弹出层中关闭包含iframe的div(子页面调用父页面js函数)
父页面: <div id="win2" style=" width:300px; height:200px; border:1px solid red;" ...
- php 数据处理--合并,拆分,追加,去重
1. 合并数组 array_merge()函数将数组合并到一起,返回一个联合的数组.所得到的数组以第一个输入数组参数开始,按后面数组参数出现的顺序依次迫加. 示例代码: <?php $arr = ...
- POJ 3126 Prime Path(BFS算法)
思路:宽度优先搜索(BFS算法) #include<iostream> #include<stdio.h> #include<cmath> #include< ...
- hdu--2111--Saving HDU(贪心)
#include<iostream> #include<vector> #include<algorithm> using namespace std; struc ...
- STL defalloc.h
defalloc.h . // Filename: defalloc.h . . // Comment By: 凝霜 . // E-mail: mdl2009@vip.qq.com . // Blog ...
- JavaWEB - 静态include指令、动态Include指令
(一)使用静态include指令 <%@ page language="java" contentType="text/html; charset=gb2312&q ...
