jquery抽奖插件+概率计算
2024-08-31 16:57:13
写了一个抽奖的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;
}
};
最新文章
- 理解Angular中的$apply()以及$digest()
- jsp 中 有没有类似java if else语句
- android 使用shape来优化界面效果
- 【BZOJ】1082: [SCOI2005]栅栏(二分+dfs)
- Python-描述符
- [转载]socket下server端支持多客户端并发访问简单实现
- Node.js 学习(二) 创建第一个应用
- ASP.NET MVC+Bootstrap个人博客之praise.js点赞特效插件(二)
- Java基础知识强化53:经典排序之选择排序(SelectionSort)
- 【玩转树莓派】使用 sinopia 搭建私有 npm 服务器
- 【PHP】 PHPqrCode二维码类库使用方法
- Meet Python
- NancyFX 第三章 Web框架
- 联发科MT8788基带处理器介绍
- Python的串口通信(pyserial)
- POJ 2253 Frogger (Floyd)
- Jquery----对文档操作
- django 返回json数据
- nodejs zip压缩版安装与配置
- query简洁弹出层代码
热门文章
- Luogu-2657 [SCOI2009]windy数
- 算法(Algorithms)第4版 练习 1.3.42
- 关于spring事务注解
- Bootstrap(二)段落+强调内容
- linux lvm
- POJ 2831 Can We Build This One:次小生成树【N^2预处理】
- 机器学习(十七)— SVD奇异值分解
- jenkins-小知识点
- Tomcat_异常_03_Tomcat日志(Logger)中文乱码
- Idea_学习_06_IntelliJ IDEA 自动导入包 快捷方式 关闭重复代码提示