前端加后端验证倒计时答题功能实现
思路 前端页面控制答题的开始,请求后台,后台记录开始的时间(发出请求的当前时间),再加上倒计时时间,得出结束时间。
后端返回给前端剩余的时间,前端通过Jquery实现倒计时的动态效果。
当倒计时结束,禁止答题,当用户刷新页面时,比较请求时间与结束时间,如果前者小于后者,答题继续,否则反之。
其中,答题时间、开始时间、结束时间,均保存在内存中。
实现(SpringMVC+Jquery) 后端:
1 /** 2* Copyright 2016 Zhengbin's Studio. 3* All right reserved. 4* 2016年6月3日 下午3:20:19 5*/ 6 package zut.race.control.back; 7 8 import java.util.Date; 9 10 import javax.servlet.http.HttpServletRequest; 11 12 import org.apache.log4j.Logger; 13 import org.springframework.stereotype.Controller; 14 import org.springframework.ui.ModelMap; 15 import org.springframework.web.bind.annotation.RequestMapping; 16 17 /** 18* @author zhengbinMac 19* 20*/ 21 @Controller 22 @RequestMapping("test") 23 public class TestTimeController { 24private static final Logger logger = Logger.getLogger(TestTimeController.class); 25private static long beginTime = -1; // 毫秒 26private static long answerTime = 20 * 1000; // 毫秒 27private static long endTime = -1; // 毫秒 28 29/* 30* 1.裁判宣布开始答题 2.选手请求页面可以开始答题 3.选手中途关闭页面 4.倒计时结束,不可答题(前端加后端) 31*/ 32@RequestMapping("/begin") 33public String begin(HttpServletRequest request, ModelMap model) { 34// 裁判规定答题时间'answerTime' 35String tempTime = request.getParameter("answerTime"); 36// 如果裁判没有规定答题时间,则为默认倒计时20秒 37if (tempTime != null) { 38answerTime = (Integer.parseInt(tempTime) + 2) * 1000; // 毫秒 39} 40// 记录裁判‘开始’的时间 41beginTime = new Date().getTime(); // 毫秒 42// 结束时间,开始时间加上答题时间 43endTime = beginTime + answerTime; 44return "redirect:/test/answer.do"; 45} 46 47// 学生访问答题页面 48@RequestMapping("/answer") 49public String answer(ModelMap model) { 50// 判断学生当前请求的时间是否在结束时间内 51long nowTime = new Date().getTime(); 52if (beginTime == -1) { 53model.addAttribute("message", "比赛未开始!"); 54return "/index.jsp"; 55} 56// 如果学生当前请求的时间大于结束时间,返回‘答题结束’,否则可以‘继续答题’ 57if (nowTime >= endTime) { 58model.addAttribute("message", "答题结束!"); 59logger.info("答题结束,当前时间:" + nowTime); 60} else { 61model.addAttribute("message", "请继续答题!"); 62model.addAttribute("endTime", endTime - nowTime); 63} 64return "/index.jsp"; 65} 66 }
【前端加后端验证倒计时答题功能实现】前端:
1 2 3 8 9 10 51 52 53${message}
54 58 59距答题结束还有: 天 小时 分 秒 61 62 63 64
*草草实现功能,代码不够优雅
推荐阅读
- 为什么你的路演总会超时()
- 对称加密和非对称加密的区别
- 基于微信小程序带后端ssm接口小区物业管理平台设计
- mybatisplus|mybatisplus where QueryWrapper加括号嵌套查询方式
- Android中的AES加密-下
- django-前后端交互
- 我正在参加安特思库共读一本书干法。
- 使用composer自动加载类文件
- 巴厘岛义工行
- Jsr303做前端数据校验