核心思路
采用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以上
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/51754.html
標籤:JavaScript
