HTML5抽獎轉盤-CSS3超簡單版本

来源:https://www.cnblogs.com/coderhf/archive/2020/06/30/13213830.html
-Advertisement-
Play Games

核心思路 採用CSS3的transition(過渡效果),給定需要旋轉的元素設置transform的rotate屬性的結束角度,同時添加transition-timing-function來控制旋轉的速率包括起始速率和結束速率,代碼如下(瀏覽器首碼可自行添加): #pointer { transit ...


核心思路

採用CSS3的transition(過渡效果),給定需要旋轉的元素設置transform的rotate屬性的結束角度,同時添加transition-timing-function來控制旋轉的速率包括起始速率和結束速率,代碼如下(瀏覽器首碼可自行添加):

 #pointer {
   transition: transform 6.5s;
   transition-timing-function: ease-in-out;
 }

 

這樣,給定結束角度後,元素就會旋轉,結束角度可以自由控制旋轉的圈數,例如結束角度為angelEnd,即圈數m=angelEnd/360 並取整,前幾圈轉滿360無需特殊處理,關鍵是最後一圈的角度決定了抽獎的結果,代碼如下:

     
let base = 2160; //先轉滿360×6圈
     let result = getRandom(-30,330); // 最後一圈角度,獲取-30到330的隨機數
     let angelEnd = -(base+result)// 結束角度數,負數代表逆時針旋轉
     $("#pointer").css({"transform":"rotate("+angelEnd+"deg)"});// 設置CSS

 

判斷抽獎結果

通過監聽旋轉元素的transitionend獲得動畫結束的事件,在此回調中,可以判斷抽獎結果,同時結合獎品數據及獎品的角度區間來計算,代碼如下:

     gifts = {
       "1":{
           angleStart : -30,
           angleEnd : 30,
           tips : "恭喜您獲得理財金2000元~~"
       },
       "2":{
           angleStart : 31,
           angleEnd : 90,
           tips : "恭喜您獲得理財金1000元~~"
       },
       "3":{
           angleStart : 91,
           angleEnd : 150,
           tips : "很遺憾沒有能中獎,再試一次吧~"
       },
       "4":{
           angleStart : 151,
           angleEnd : 210,
           tips : "恭喜您抽中京東E卡一張~"
       },
       "5":{
           angleStart : 211,
           angleEnd : 270,
           tips : "恭喜您獲得理財金5200元~~"
       },
       "6":{
           angleStart : 271,
           angleEnd : 330,
           tips : "很遺憾沒有能中獎,再試一次吧~"
       }
       
     $("#pointer").on('transitionend',function(){
         for (var key in gifts) {
           // 最後一圈的角度落在哪個獎品區間
           if (options.gifts[key].angleStart <= result && result<=options.gifts[key].angleEnd) {
             // 得到獎品的key值
             alert(options.gifts[key].tips);
           }
         }
     })

 

設定指定獎品

每個抽獎程式都可能預留內部介面,轉盤也不例外,通過設置最後一圈的角度數即可提前設置獎品結果,代碼如下:

 let _key = null; // 內定獎品id
if (_key) {
   result = getRandom(gifts[_key].angleStart,gifts[_key].angleEnd)
 }

 

總結

對了,小編為大家準備了一套2020最新的web前端資料,需要點擊下方鏈接獲取方式

學習前端,你掌握這些。二線也能輕鬆拿8K以上

 

 

 


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

-Advertisement-
Play Games
更多相關文章
  • //商品列表 var id=@Session["Id"]; function load() { $.ajax({ url: "http://localhost:52975/api/Goods/GetGood/"+id, type: "post", dataType: "json", success: ...
  • 在前面隨筆《循序漸進VUE+Element 前端應用開發(12)--- 整合ABP框架的前端登錄處理》介紹了一個系統最初接觸到的前端登錄處理的實現,但往往對整個系統來說,一般會有很多業務對象,而每個業務對象的API介面又有很多,不過簡單來說也就是常規的增刪改查,以及一些自定義的介面,通用都比較有規律... ...
  • 摘要 頁面報錯bug是常有的事,我們可以根據錯誤bug提示關鍵性的去修複問題。依稀的記得之前有個小伙伴詢問了一個js異常的錯誤bug:Uncaught TypeError: xxx is not a function。這個錯誤問題定位處理起來很快,但是我卻不知其所以然。為了弄清楚報錯的深層面原因,去 ...
  • Web前端作為開發團隊中不可或缺的一部分,需要按照相關規定進行合理編寫(一部分不良習慣可能給自己和他人造成不必要的麻煩)。不同公司不同團隊具有不同的規範和文檔。下麵是根據不同企業和團隊的要求進行全面詳細的整理結果。備註:實際開發請以本公司的規範為標準。 A.基本原則 符合web標準(UTF-8,HT ...
  • 1.格式化金錢值 const ThousandNum = num => num.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ","); const money = ThousandNum(20190214); // money => "20,190,214 ...
  • 摘要 近期在優化團隊代碼,發現Redux重覆使用的代碼過多。 經過調研發現了Rematch庫:Redux是一個出色的狀態管理工具,並且有著健全的中間件生態以及出色的開發工具;Rematch是沒有boilerplate的Redux最佳實踐。移除了聲明action類型、action創建函數、thunks ...
  • safari瀏覽器字體不能自動隨網頁縮放調整大小 -webkit-text-size-adjust:100% 點擊<button><input>有灰色透明背景 -webkit-tap-highlight-color:rgba(0,0,0,0); 微信、QQ內置瀏覽器視頻自動全屏 非騰訊功能變數名稱的視頻地址 ...
  • 在日常的項目中,有時候還是不可避免的會維護一些jq官網項目等。面對此類需求,很多還是以前的老套路,前端寫頁面交給後端去套數據。很煩有木有~~而改動之後還得交給後端再次修改,時間和溝通都是個麻煩。同時開發中,寫靜態頁面也很麻煩,不能復用,不能使用現在的工具,心累有木有~~當然了,解決辦法很多 自己寫個 ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...