移動端 - 九宮格抽獎

来源:https://www.cnblogs.com/zxk5211/archive/2019/09/26/web_19.html
-Advertisement-
Play Games

九宮格抽獎Demo 九宮格抽獎模型&HTML拼接模型 圖1 圖2 註 :當動態實現九宮格獎品信息展示時,若想按照圖1位置顯示獎品信息,則此時需要換一下九宮格的位置。替換位置為:4→8、6→4、8→6、9→5、5→○(○即抽獎按鈕)。 封裝九宮格獎品列表排序方法 初始全局變數(獲獎獎品下標) 獎品動畫 ...


九宮格抽獎Demo

九宮格抽獎模型&HTML拼接模型
      圖1                                                           ** 圖2 **
九宮格.png拼接圖.png


:當動態實現九宮格獎品信息展示時,若想按照圖1位置顯示獎品信息,則此時需要換一下九宮格的位置。
替換位置為:4→8、6→4、8→6、9→5、5→○(○即抽獎按鈕)。

封裝九宮格獎品列表排序方法

/* 九宮格獎品列表排序 */
function sortList(data, el) {
    var ID4,
        str = '';
    for (var i = 0; i < data.length; i++) {
        if (i == 3) {
            //3->7
            str += "<div class='prize jp-" + 7 + "'><img src='" + data[i].pic + "'><p>" + data[i].name + '</p></div>';
        } else if (i == 4) {
            // 4
            ID4 = 4;
            str += "<div id='Btn'><p>開始抽獎</p></div>";
        } else if (i == 5) {
            //5->3
            str += "<div class='prize jp-" + 3 + "'><img src='" + data[i].pic + "'><p>" + data[i].name + '</p></div>';
        } else if (i == 7) {
            //7->5、8->4
            str +=
                "<div class='prize jp-" +
                5 +
                "'><img src='" +
                data[i].pic +
                "'><p>" +
                data[i].name +
                "</p></div><div class='prize jp-" +
                ID4 +
                "'><img src='" +
                data[ID4].pic +
                "'><p>" +
                data[ID4].name +
                '</p></div>';
        } else {
            str += "<div class='prize jp-" + i + "'><img src='" + data[i].pic + "'><p>" + data[i].name + '</p></div>';
        }
    }
    $('#' + el).html(str);
}

//初始化抽獎按鈕點擊屬性
var click = false;

初始全局變數(獲獎獎品下標)

// 獎品列表
var prizeList,
    // 中獎下標(在獎品列表中的下標)
    prizeObj = {
        pIndex: ''
    };

獎品動畫初始化

var luck = {
    index: -1, //當前轉動到哪,起點位置
    count: 0, //共有多少個位置
    timer: 0, //setTimeout的ID,用clearTimeout清除
    speed: 20, //初始化轉動速度
    times: 0, //轉動次數
    cycle: 25, //轉動基本次數:即轉動多少次之後進入抽獎環節
    prize: -1, //中獎位置
    init: function(id) {
        if ($('#' + id).find('.prize').length > 0) {
            $luck = $('#' + id);
            $units = $luck.find('.prize');
            this.obj = $luck;
            this.count = $units.length;
            $luck.find('.jp-' + this.index).addClass('active');
        }
    },
    roll: function() {
        var index = this.index;
        var count = this.count;
        var luck = this.obj;
        $(luck).find('.jp-' + index).removeClass('active');
        index += 1;
        if (index > count - 1) index = 0;
        $(luck).find('.jp-' + index).addClass('active');
        this.index = index;
        return false;
    },
    stop: function(index) {
        this.prize = index;
        return false;
    }
};

時間、轉速、中獎下標控制

/* 時間、速度、中獎編號控制 */
function roll() {
    luck.times += 1;
    luck.roll();
    if (luck.times > luck.cycle + 10 && luck.prize == luck.index) {
        clearTimeout(luck.timer);
        luck.prize = -1;
        luck.times = 0;
        click = false;
    } else {
        if (luck.times < luck.cycle) {
            luck.speed -= 20;
        } else if (luck.times == luck.cycle) {
            // 獎品位置下標 全局變數prizeObj對象為中獎信息
            if (prizeObj.pIndex != '') luck.prize = prizeObj.pIndex;
        } else {
            if (
                luck.times > luck.cycle + 10 &&
                ((luck.prize == 0 && luck.index == 7) || luck.prize == luck.index + 1)
            ) {
                luck.speed += 110;
            } else {
                luck.speed += 20;
            }
        }
        if (luck.speed < 40) luck.speed = 40;
        luck.timer = setTimeout(roll, luck.speed);
    }
    return false;
}

載入抽獎動畫

luck.init('prizeBox');
/* 點擊抽獎 */
$('#Btn').click(function() {
    if (click) {
        return false;
    } else {
        $.ajax({
            async: false,
            url: 'url',
            type: 'post',
            data: {},
            dataType: 'json',
            success: function(res) {
                if (res.code) {
                    /* 尋找商品下標 */
                    // 尋找中獎商品下標代碼...

                    /* 動畫 */
                    // 初始轉速
                    luck.speed = 100;
                    // 觸發動畫
                    roll();
                    // 激活點擊事件
                    click = true;
                    // 延時動畫
                    setTimeout(function() {
                        $('#mask').fadeIn();
                    }, 3600);
                    return false;
                } else {
                    alert(res.message);
                }
            }
        });
        return false;
    }
});

中獎獎品位置的判斷(回顯到九宮格上)

function findPirzeIndex(data, goodId) {
    for (let j = 0, len = data.length; j < len; j++) {
        if (data[j].goodId == goodId) {
            switch (j) {
                case 0:
                    prizeObj.pIndex = 0;
                    break;
                case 3: // 3->7
                    prizeObj.pIndex = 7;
                    break;
                case 4: //
                    prizeObj.pIndex = 4;
                    break;
                case 5: // 5->3
                    prizeObj.pIndex = 3;
                    break;
                case 7: // 7->5
                    prizeObj.pIndex = 5;
                    break;
                default:
                    prizeObj.pIndex = j;
            }
        }
    }
}

:通過該方法來查找中獎獎品的位置;查找的元素的下標為該元素在其數組對象中的位置下標,此時對比圖1和圖2兩個圖表的位置信息,就可以確定中獎獎品所在圖1表盤的具體位置。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 頁面echarts.js報錯:Uncaught TypeError: Cannot read property 'getAttribute' of null ...
  • 修改wxParse/html2json.js 文件 ,在 html2json(html, bindName) 方法里 這裡使用 node.tag 能夠獲取標簽類型,比如: img、embed、video 這裡我的系統後臺編輯器使用的是ckeditor 上傳視頻。生成的便簽是:embed 所以加上判斷 ...
  • Vue 的 父傳子 子傳父 一、父組件向子組件傳值: 父傳子 把需要的數據 傳遞給 子組件,以數據綁定(v-bind)的形式,傳遞到子組件內部,供子組件使用 縮寫是(:) 1.創建子組件,在src/components/文件夾下新建一個Child.vue 子組件 2.Child.vue的中創建pro ...
  • 啥是HTML5?官方說HTML5 是下一代的 HTML... 本文主要介紹HTML5三個方面的知識,繼續往下看看吧。 語義化標簽 canvas&svg 響應式meta 一、語義化標簽 語義化標簽的優點: 比<div>標簽有更加豐富的含義,方便開發與維護 方便搜索引擎能識別頁面結構,有利於SEO 方便 ...
  • 利用正則表達式匹配是否為數字,直接上demo ...
  • 創建項目 先創建一個空目錄,在該目錄打開命令行,執行 命令創建一個項目(無法執行 npm 命令?需要先安裝 "Node" ),這個過程會提示輸入一些內容,隨意輸入就行,完成後會自動生成一個 package.json 文件,裡面包含剛纔輸入的內容 創建一個 index.html 頁面,由於使用的是 V ...
  • <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>圖片併排排列</title> <style> .xd-box{ width: 1100px; margin: 0px auto; position: relative; } .xd ...
  • 一.增 其中expires的格式為Fri Sep 27 2019 14:27:25 GMT+0800 (中國標準時間)的一個對象.toUTCString 對於時間設置 二.改 用同樣的key的名稱覆蓋就好了 三.查 查看全部document.cookie的結果為字元串,每個cookie之間都由;連接 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...