写了一个抽奖的jquery插件和计算概率的方法, 结合起来就是一个简单的概率抽奖, 不过实际项目中基本不会把抽奖概率的计算放在前端处理~。



demo

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;
}
};

最新文章

  1. 理解Angular中的$apply()以及$digest()
  2. jsp 中 有没有类似java if else语句
  3. android 使用shape来优化界面效果
  4. 【BZOJ】1082: [SCOI2005]栅栏(二分+dfs)
  5. Python-描述符
  6. [转载]socket下server端支持多客户端并发访问简单实现
  7. Node.js 学习(二) 创建第一个应用
  8. ASP.NET MVC+Bootstrap个人博客之praise.js点赞特效插件(二)
  9. Java基础知识强化53:经典排序之选择排序(SelectionSort)
  10. 【玩转树莓派】使用 sinopia 搭建私有 npm 服务器
  11. 【PHP】 PHPqrCode二维码类库使用方法
  12. Meet Python
  13. NancyFX 第三章 Web框架
  14. 联发科MT8788基带处理器介绍
  15. Python的串口通信(pyserial)
  16. POJ 2253 Frogger (Floyd)
  17. Jquery----对文档操作
  18. django 返回json数据
  19. nodejs zip压缩版安装与配置
  20. query简洁弹出层代码

热门文章

  1. Luogu-2657 [SCOI2009]windy数
  2. 算法(Algorithms)第4版 练习 1.3.42
  3. 关于spring事务注解
  4. Bootstrap(二)段落+强调内容
  5. linux lvm
  6. POJ 2831 Can We Build This One:次小生成树【N^2预处理】
  7. 机器学习(十七)— SVD奇异值分解
  8. jenkins-小知识点
  9. Tomcat_异常_03_Tomcat日志(Logger)中文乱码
  10. Idea_学习_06_IntelliJ IDEA 自动导入包 快捷方式 关闭重复代码提示