1. 程式人生 > >商品詳情頁及秒殺倒計時功能

商品詳情頁及秒殺倒計時功能

詳情頁進入:就是前端點選連結,連結中有{goodsId}作為引數,後端@PathVarible 拿到這個id,然後去資料庫查詢對應的商品資訊,並顯示的一個功能。

這裡有一個比較重要的就是秒殺倒計時功能:

後端獲取秒殺開始時間和結束時間,以及系統當前時間,並定義剩餘時間變數和秒殺狀態,傳給前端。

    @RequestMapping(value = "/to_detail2/{goodsId}",produces = "text/html") // 前端傳入的引數 goodsId
@ResponseBody
public String detail2(HttpServletRequest request,HttpServletResponse response,
Model model,MiaoshaUser user, @PathVariable("goodsId") Long goodsId){//通過註解@PathVariable獲取路徑引數 /*取快取*/ String html = redisService.get(GoodsKey.getGoodsDetail,""+goodsId,String.class); if (!StringUtils.isEmpty(html)) { return html; } //沒有快取,渲染頁面 /*先將user 傳進去 用來判斷是否登入*/ model.addAttribute("user"
,user); /*根據傳入的Id 通過service 拿到對應的Good資訊*/ GoodsVo goods = goodsService.getGoodsById(goodsId); model.addAttribute("goods",goods); long startTime = goods.getStartDate().getTime(); long endTime = goods.getEndDate().getTime(); long nowTime = System.currentTimeMillis();/* 拿到現在時間的毫秒值*/
/**這裡要做一個秒殺時間的判斷 秒殺開始 秒殺結束 秒殺進行 * */ int miaoshaStatus = 0;/*用該變數來表示 秒殺的狀態 0 表示秒殺未開始 1 開始 2 結束*/ int remainSeconds = 0; /*表示剩餘時間 距離秒殺開始的時間*/ if (nowTime<startTime){//秒殺未開始 miaoshaStatus = 0; remainSeconds = (int)((startTime-nowTime)/1000);//注意此時是 毫秒值 要除以1000 }else if (endTime<nowTime){//秒殺結束 miaoshaStatus = 2; remainSeconds = -1; }else {//秒殺進行中 miaoshaStatus = 1; remainSeconds = 0; } model.addAttribute("remainSeconds",remainSeconds); model.addAttribute("miaoshaStatus",miaoshaStatus); // return "goods_detail";}

前端定義個remainSecode 獲取後端傳過來的值,通過這個值來判斷是否開始秒殺,結束,還是進行中,

並在前端定義個方法:沒開始的時候 按鈕,不可點選,作倒計時,開始後顯示按鈕,結束也不可點按鈕

function countDown() {
    var remianSeconds =$("#remainSeconds").val();
var timeout;//定義一個timeout 儲存Timeout if (remianSeconds>0){//秒殺未開始
$("#buyButton").attr("disabled",true);/*還沒開始的時候按鈕不讓點*/
        /*且做一個倒計時*/
timeout=setTimeout(function () {//setTimeout 為時間到了之後執行 該函式
$("#countDown").text(remianSeconds-1);//將顯示中的值 -1
$("#remainSeconds").val(remianSeconds-1);// remianSeconds 值減一
countDown();//在呼叫該方法 實現迴圈
},1000)
    }else if (remianSeconds == 0){//秒殺進行中
$("#buyButton").attr("disabled",false);
//remainSeconds =0
clearTimeout(timeout);//取消timeout 程式碼執行
$("#miaoshaTip").html("秒殺進行中!")//修改其中的內容
} else {//秒殺結束
$("#buyButton").attr("disabled",true);
$("#miaoshaTip").html("結束!!!")//修改其中的內容
}
}

未開始時有個CountDown反方,有個timefuntion,1000毫秒,即每過一秒,將remianSecond 值減一,並設定到顯示text中,然後在呼叫coutDown,即每過一秒判斷一次,顯示一次。