let urlPrefix = getUrlPrefix() let browser = checkVersion() let env = EnvCheck(); if (env == 'test') { new VConsole(); } let lock = false //防止用戶暴力點擊加的鎖 // 封裝layer消息提醒框 let layerIndex const showLoading = (content = '加載中...') => { layer.open({ type: 2, shadeClose: false, content, success (e) { layerIndex = $(e).attr('index') } }) } const hideLoading = (index) => { layer.close(index) } const toastMsg = (content = '操作完成', time = 2) => { layer.open({ content, time, skin: 'msg' }) } if (!browser.app) { toastMsg('請在app內打開!'); } else { $('.wrap').removeClass('no-in-app') } // 獲取用戶相關信息 let myFragment const getUserInfo = (param) => { networkRequest({ type: 'GET', url: urlPrefix + '/act/luckySea/getUserActInfo', success (res) { if (res.code === 200) { $('.bottom .info-wrap .fragment-num span').text(res.data.todayReward); $('.bottom .info-wrap .diamond-num span').text(res.data.diamonds); $('.bottom .avatar img').attr('src', res.data.avatar); $('.info-bottom').find('.avatar img').attr('src', res.data.avatar) if (res.data.todayReward.toString().length >= 5) { res.data.todayReward = (res.data.todayReward / 10000).toFixed(2) + 'w' } $('.info-bottom').find('.award span').html(res.data.todayReward) $('.info-bottom').find('.fragment span').html(res.data.diamonds) myFragment = res.data.diamonds } else { return toastMsg(res.message) } }, error (err) { toastMsg('網絡錯誤,請退出重進') } }) } // 獲取用戶碎片信息 const getUserPieceNum = () => { networkRequest({ type: 'GET', url: urlPrefix + '/act/luckySea/getUserActInfo', success (res) { if (res.code === 200) { $('.info-bottom').find('.fragment span').html(res.data.diamonds) myFragment = res.data.diamonds; } else { return toastMsg(res.message) } lock = !lock }, error (err) { toastMsg('網絡錯誤,請退出重進') } }) } // 獲取遊戲模式 1普通模式 2禮物模式 let modelType const getGameMode = () => { networkRequest({ type: 'GET', url: urlPrefix + '/act/luckySea/getTimeConfig', success (res) { if (res.code === 200) { modelType = res.data.modelType getNewestAct() } else { return toastMsg(res.message) } }, error (err) { toastMsg('網絡錯誤,請退出重進') } }) } let userComeinTime //用戶進入遊戲界面時間,後端返回的timestamp let startTime, drawStageStartTime, showResultStageStartTime, endTime //4個時間戳判斷落於哪個界面 let timer2 let roundId let roundIdArr = [] let arrTime = [], arrTime2 = [], arrTime3 = [] const getNewestAct = () => { networkRequest({ type: 'GET', url: urlPrefix + '/act/luckySea/getNewestAct', success (res) { if (res.code === 200) { if ($.isEmptyObject(res.data) || res.data.status === 4) { return showLoading('服務器正在維護中...') } else { console.log(res.timestamp > res.data.endTime); if (res.timestamp >= res.data.endTime) { //請求的還是上一輪的數據,重新請求 console.log('請求的還是上一輪的數據,必須重新請求'); showLoading() timer2 = setTimeout(() => { getNewestAct() }, 600); } else { clearTimeout(timer2) hideLoading(layerIndex) roundId = res.data.roundId getListItem(roundId, modelType) // 進行下一輪時,arrTime重新置為空數組,不然在下一輪開始的時候也會執行location.reload() if (roundIdArr.length < 2) { roundIdArr = [roundId, roundId] } else { roundIdArr[0] = roundIdArr[1] roundIdArr[1] = roundId if (roundIdArr[0] != roundIdArr[1]) { arrTime = [] arrTime2 = [] arrTime3 = [] } } userComeinTime = res.timestamp startTime = res.data.startTime drawStageStartTime = res.data.drawStageStartTime showResultStageStartTime = res.data.showResultStageStartTime endTime = res.data.endTime console.log('獲取5個時間戳的值-----', 'timestamp:', userComeinTime, 'startTime:', startTime, 'drawStageStartTime:', drawStageStartTime, 'showResultStageStartTime:', showResultStageStartTime, 'endTime:', endTime); showView() } } } else { return toastMsg(res.message) } }, error (err) { toastMsg('網絡錯誤,請退出重進') } }) } //不為3繼續請求 為3拿數據 為4彈窗 let status // 顯示哪個界面 let $countDown //區分倒計時到0時的區別處理的字段,處於第二階段時isStatus2為真,處於第三階段時isStatus3為真 let isStatus2 let isStatus3 let isSelectTab = false let mySelect let fragmentNum let reg = /^[0-9]*$/ const showView = () => { if (startTime <= userComeinTime && userComeinTime < drawStageStartTime) { // 第一階段 console.log('進入第一階段'); isSelectTab = false $('.select-time').show().siblings().hide() $countDown = $('.select-time .count-down .count-down-num') mySelect = sessionStorage.getItem("mySelect") if (reg.test(mySelect)) { $('.btn-wrap div').eq(mySelect).addClass('active').siblings().removeClass('active') fragmentNum = parseInt($('.btn-wrap div').eq(mySelect).html()) isSelectTab = true } else { $('.btn-wrap div').eq(0).addClass('active').siblings().removeClass('active') fragmentNum = parseInt($('.btn-wrap div').eq(0).html()) isSelectTab = true } $('.award-wrap').html('').show() $('.award-info .desc').html('') getPreviousResults(11, roundId) showCountDown(userComeinTime, startTime, drawStageStartTime) getUserInfo() } else if (drawStageStartTime <= userComeinTime && userComeinTime < showResultStageStartTime) { // 第二階段 console.log('進入第二階段'); sessionStorage.removeItem("mySelect") $('.wait-time').show().siblings().hide() $countDown = $('.wait-time .count-down .count-down-num') clearTimeout(timer2s) //清除第一階段的2s氣泡定時器 time2sIndex = 0 isStatus2 = true //處於第二階段的標識 console.log('isStatus2的值------------', isStatus2); // $('.btn-wrap').find('div').removeClass('active') getPreviousResults(11, roundId) showCountDown(userComeinTime, drawStageStartTime, showResultStageStartTime) judgeStatus() getUserInfo() // 播放5s動畫 let player = new SVGA.Player('.wait-time'); let parser = new SVGA.Parser('.wait-time'); parser.load('./images/wait.svga', function (videoItem) { // player.loops = 2; player.clearsAfterStop = false; player.setVideoItem(videoItem); player.startAnimation(); }) } else if (showResultStageStartTime <= userComeinTime && userComeinTime < endTime) { // 第三階段 console.log('進入第三階段'); $('.draw-time').show().siblings().hide() $countDown = $('.draw-time .count-down .count-down-num') isStatus3 = true //處於第三階段的標識 console.log('isStatus3的值------------', isStatus3); showCountDown(userComeinTime, showResultStageStartTime, endTime) judgeStatus() getUserInfo() // getPreviousResults(11, roundId) } } // 顯示倒計時 let countDownTime let deltaT let timer let delayTime let interval const showCountDown = (timestamp, startTime, endTime) => { deltaT = ((endTime - startTime) - (timestamp - startTime)) / 1000 //12.361 if (deltaT >= 1) { interval = 1 } else { interval = 0 } console.log('deltaT----------', deltaT); countDownTime = Math.floor(deltaT) //12.361 => 12 delayTime = deltaT - countDownTime //請求接口的延遲時間 $countDown.html(countDownTime) timer = setInterval(() => { if (browser.ios) { if (!isStatus3 && !isStatus2) { // 處理第一階段 if (arrTime.length < 2) { arrTime = [new Date().getTime(), new Date().getTime()] } else { arrTime[0] = arrTime[1] arrTime[1] = new Date().getTime() if ((arrTime[1] - arrTime[0]) / 1000 > 1.5) { window.location.reload() } } } else if (isStatus2) { // 第二階段也要處理 if (arrTime2.length < 2) { arrTime2 = [new Date().getTime(), new Date().getTime()] } else { arrTime2[0] = arrTime2[1] arrTime2[1] = new Date().getTime() if ((arrTime2[1] - arrTime2[0]) / 1000 > 1.5) { window.location.reload() } } } else if (isStatus3) { // 第三階段也要處理 if (arrTime3.length < 2) { arrTime3 = [new Date().getTime(), new Date().getTime()] } else { arrTime3[0] = arrTime3[1] arrTime3[1] = new Date().getTime() if ((arrTime3[1] - arrTime3[0]) / 1000 > 1.5) { window.location.reload() } } } } countDownTime-- if (countDownTime <= 0) { $countDown.html(0) clearInterval(timer) if (isStatus2) { // 倒計時為0時,處於第二階段的處理 if (status) { // hideLoading(layerIndex) setTimeout(() => { getNewestAct() }, delayTime * 1000) isStatus2 = false } else { showLoading() // toastMsg('服務器繁忙,請稍等') console.log('status的值-----------', status); judgeStatus() } } else if (isStatus3) { //倒計時為0時,處於第三階段的處理 setTimeout(() => { getNewestAct() // getListItem(roundId) }, delayTime * 1000) // getNewestAct() // getListItem() isStatus3 = false } else { setTimeout(() => { getNewestAct() }, delayTime * 1000) } // else { // setTimeout(() => { // getNewestAct() // }, delayTime * 1000) // } } else { $countDown.html(countDownTime) } }, interval * 1000) } //判斷status的狀態 let timer4 let drawInfo let img //第三階段的中獎動物img const judgeStatus = () => { console.log('進入二階段時輪詢查看結果是否已經出了'); networkRequest({ type: 'GET', url: urlPrefix + '/act/luckySea/getNewestAct', success (res) { if (res.code === 200) { console.log('res.data的值------------', res.data); if ($.isEmptyObject(res.data) || res.data.status === 4) { console.log('程序崩了!!!'); return showLoading('服務器正在維護中...') } else if (res.data.status === 3) { clearTimeout(timer4) status = true if (isStatus2 && countDownTime <= 0) { showCountDown(userComeinTime, drawStageStartTime, showResultStageStartTime) } // hideLoading(layerIndex) console.log('status為3時返回的數據--------------', res.data); drawInfo = res.data img = res.data.drawImageUrl if (isStatus3) { getPreviousResults(11, roundId) } renderDrawInfo() } else { timer4 = setTimeout(() => { judgeStatus() }, 1000) } } else { toastMsg(res.message) } }, error (err) { toastMsg('網絡錯誤,請退出重進') } }) } // 渲染開獎信息 let topThreeArr = [] const renderDrawInfo = () => { $('.draw-time .current-tip .current-result').html(drawInfo.drawName) $('.draw-pic img').attr('src', drawInfo.drawImageUrl) if (isStatus3) { if (drawInfo.userDrawResult.drawStatus === 1) { $('.award-info .desc').html('恭喜你,猜中了!') // if (modelType === 1) { // $('.award-wrap').html(`獲得 ${drawInfo.userDrawResult.prizeDiamonds} 鉆石`) // } else { // $('.award-wrap').html(`獲得 ${drawInfo.userDrawResult.prizeName} (${drawInfo.userDrawResult.prizePrice}鉆)*${drawInfo.userDrawResult.prizeCount}個 累計${drawInfo.userDrawResult.prizeDiamonds}鉆石`) // } } else if (drawInfo.userDrawResult.drawStatus === 2) { $('.award-info .desc').html('很遺憾,本輪未猜中') $('.award-wrap').hide() } else if (drawInfo.userDrawResult.drawStatus === 3) { $('.award-info .desc').html('本輪未參與') $('.award-wrap').hide() } } // 渲染前三名 topThreeArr = drawInfo.rankUserList let str = '' if (topThreeArr.length === 0) { $('.topthree-desc').html('本輪無人猜中') $('.top-three-list p img').attr('src', './images/default-hui.png') } else { $('.topthree-desc').html('本輪前三名') topThreeArr.map((item, index) => { $('.top-three-list p img').eq(index).attr('src', item) }) if (topThreeArr.length === 1) { $('.top-three-list p img').eq(1).attr('src', './images/default-hui.png') $('.top-three-list p img').eq(2).attr('src', './images/default-hui.png') } else if (topThreeArr.length === 2) { $('.top-three-list p img').eq(2).attr('src', './images/default-hui.png') } } } // 獲取每一輪抽獎的相關配置 let listItem = [] const getListItem = (roundId, type) => { networkRequest({ type: 'GET', url: urlPrefix + '/act/luckySea/listItem', data: { roundId, type }, success (res) { if (res.code === 200) { listItem = res.data renderListItem() } else { toastMsg(res.message) } }, error (err) { toastMsg('網絡錯誤,請退出重進') } }) } // 2s氣泡定時器 let timer2s let time2sIndex = 0 const setTimeout2s = () => { clearTimeout(timer2s) $('.bubble-2s').eq(time2sIndex).fadeIn(50) timer2s = setTimeout(function () { $('.bubble-2s').eq(time2sIndex).fadeOut(50) if (time2sIndex >= listItem.length - 1) { time2sIndex = 0 } else { time2sIndex++; } setTimeout2s() }, 2000) } // 渲染每一輪抽獎的選項 const renderListItem = () => { let str = '' if (modelType === 1) { listItem.map((item) => { str += `
點擊選取
賺 ${item.multiple} 倍獎勵
${item.price ? `(${item.price}鉆石)` : ''}
點擊選取
賺 ${item.multiple} 倍獎勵
${num}
${item.nick.length > 5 ? item.nick.slice(0, 5) + '...' : item.nick}
${num}
${item.nick.length > 5 ? item.nick.slice(0, 5) + '...' : item.nick}