首页 > 网站 > WEB开发 > 正文

jquery抽奖插件+概率计算

2024-04-27 14:21:36
字体:
来源:转载
供稿:网友

jquery抽奖插件+概率计算

写了一个抽奖的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;}};

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表