1. 程式人生 > >jquery抽獎外掛+概率計算

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

相關推薦

jquery抽獎外掛+概率計算

寫了一個抽獎的jquery外掛和計算概率的方法, 結合起來就是一個簡單的概率抽獎, 不過實際專案中基本不會把抽獎概率的計算放在前端處理~。 demo lottery.jquery.js $.fn.extend({ lottery: function(conf) { var def

利用jQuery旋轉外掛jqueryrotate製作轉盤抽獎

                     <!DOCTYPE html><html>    <head lang="en">        <meta charset="UTF-8"/>        <meta name="viewport" conte

轉盤抽獎外掛-jquery.lottery.js

外掛說明: 用於轉盤隨機抽獎,現在設的是轉盤的指標動,指標停留的位置需要自己設定,需要後端返回的資料型別格式為  一等獎:{code : 1 ,msg :'一等獎' }  失敗  {code : 5XX,msg:' '} 可以把成功和失敗返回的後臺資料, 利用 succes

jquery.rotate外掛實現轉盤抽獎示例

css程式碼:.draw-out{width:400px;height:400px;margin:30px auto;position:relative} .draw-bottom{width:400px;height:400px;position:relative}

jquery----抽獎系統

rip play nth lock display parseint align src spa 1、效果 2、html代碼 <!DOCTYPE html> <html> <head> <meta charset="u

HMM_概率計算——forwar_algorithm實現

print pre 技術 pro 序列 定義 pri com int 一、前向算法(遞推)   1)觀測概率初值:         2)遞推:         3)終止:        二、理解前向算法 哈哈,先欠著,沒時間碼字! 三、代碼實現: 1 def getP

jquery開發外掛

1.jQuery.extend(object);為擴充套件jQuery類本身.為類新增新的方法。  2.jQuery.fn.extend(object);給jQuery物件新增方法。 jQuery便是一個封裝得非常好的'類',比如我們用 語句$("#div1")會生成一個 jQuery

jQuery列印外掛JQPRINT

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

jquery.validate 外掛使用

jQuery.validate外掛是一個簡單易用的外掛,主要作用是在表單提交前進行相關輸入專案的有效性 驗證,驗證通過提交表單,否則提示錯誤;但需要特別注意的是,凡是需要採用該外掛驗證的表單項,均需要定義html的name屬性資訊,且和id值的定義一致,才能達到有效性驗證目的 //=======

jQuery-ui外掛datepicker的引數使用詳解

轉載:https://blog.csdn.net/hliq5399/article/details/22406989 概述 日期選擇外掛是一個配置靈活的外掛,你可以定義它的展示方式,包括日期格式、語言、限制選擇日期範圍、新增相關按鈕以及其它導航等。

基於jQuery日曆外掛製作日曆

這篇文章主要介紹了基於jQuery日曆外掛製作日曆的相關資料,需要的朋友可以參考下 來看下最終效果圖吧: 是長得醜了一點,不要吐槽我-。- 首先來說說這個日曆主要的製作邏輯吧: ·一個月份最多有31天,需要一個7X6的表格去裝載 ·如果知道了某個月份1號是星期幾,這個月份有多少天,一個迴圈就可以顯示某個月的

lightslider-支援移動觸控的輕量級jQuery幻燈片外掛

外掛簡介 lightslider是一款輕量級的響應式jQuery幻燈片外掛。lightslider幻燈片外掛能夠支援移動觸控裝置,它可以製作為帶縮圖的內容幻燈片,或者製作為無限迴圈的旋轉木馬。它的特點還有: 下載地址 線上演示 下載地址:http://www.jqhtml.com/5633.html

jQuery幻燈片外掛Owl Carousel外掛

簡介 Owl Carousel 是一個強大、實用但小巧的 jQuery 幻燈片外掛,它具有一下特點: 相容所有瀏覽器 支援響應式 支援 CSS3 過度 支援觸控事件 支援 JSON 及自定義 JSON 格式 支援進度條 支援自定義事件

使用jquery.form外掛的方法

<!doctype html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Document</title> </head> <body&

jQuery validate外掛做正整數表單驗證

jQuery validate外掛為表單提供了強大的表單驗證功能。 詳細參考菜鳥教程: http://www.runoob.com/jquery/jquery-plugin-validate.html 下面是js表單驗證正整數的例子: //自定義校驗,正整數 jQuery.vali

jquery 簡易外掛 非同步form提交、檔案非同步提交,jquery 檔案非同步提交

 $.ajax 預設不支援檔案提交, 這裡提供一個form target = iframe 的非同步提交外掛 如果需要提交檔案form 需要設定屬性 enctype="multipart/form-data",使用外掛後會自動使用target =&nb

Jquery時間外掛

 使用一個閉包自執行函式編寫外掛,傳入JQuery物件。 (function($){ $.fn.extend({ clock:function(options){ var defaults = {height:'50px',width:'13

關於抽獎概率演算法

        @Test         public void test(){            

概率計算

目錄 概率的加法法則 條件概率 乘法公式 全概率公式 P(A)=A所含樣本點數/總體所含樣本點數。實用中經常採用“排列組合”的方法計算· 條件概率:當P(A)>0,P(B|A)=P(AB)/P(A) 加法法則:P(A∪B)=P(A)+P(B)-P(AB) 乘

jQuery form外掛的使用

jQuery Form簡介 jQuery Form外掛是一個優秀的Ajax表單外掛,可以非常容易地、無侵入地升級HTML表單以支援Ajax。  jQuery Form有兩個核心方法 – ajaxForm() 和 ajaxSubmit(), 它們集合了從控制表單元素到決定如何管理提交程序