Vue 封装防刷新考试倒计时组件的实现


Posted in Javascript onJune 05, 2020

本文详细的介绍了防刷新考试倒计时组件 ,分享给大家,也给自己留个笔记,感兴趣的可以了解下

Vue 封装防刷新考试倒计时组件的实现

<!-- 考试倒计时组件 -->
<template>
 <div class="time">
  <p>00:{{timerCount2}}:{{timerCount1}}</p>
  <button @click="reset">重新计时</button>
 </div>
</template>


<script>
export default {
 name: "Time",
 data() {
  return {
   timeSeconds: 0,
   timeMinutes: 0,
   seconds: 59, // 秒
   minutes: 1, // 分
   timer: null
  };
 },
 methods: {
  num(n) {
   return n < 10 ? "0" + n : "" + n;
  },
  // 重新计时
  reset() {
   sessionStorage.removeItem("answered");
   window.location.reload();
   localStorage.removeItem("startTime1");
   localStorage.removeItem("startTime2");
   clearInterval(this.timer);
  },
  // 清除
  clear() {
   localStorage.removeItem("startTime1");
   localStorage.removeItem("startTime2");
   sessionStorage.setItem("answered", 1);
   clearInterval(this.timer);
  },
  // 倒计时
  timing() {
   let [startTime1, startTime2] = [ localStorage.getItem("startTime1"), localStorage.getItem("startTime2") ];
   let nowTime = new Date().getTime();
   if (startTime1) {
    let surplus = this.seconds - parseInt((nowTime - startTime1) / 1000);
    this.timeSeconds = surplus <= 0 ? 0 : surplus;
   } else {
    this.timeSeconds = this.seconds;
    localStorage.setItem("startTime1", nowTime); //存储秒
   }
   if (startTime2) {
    this.timeMinutes = startTime2;
   } else {
    this.timeMinutes = this.minutes;
    localStorage.setItem("startTime2", this.minutes); //存储分
   }
   this.timer = setInterval(() => {
    if ( this.timeSeconds == 0 && this.timeMinutes != 0 && this.timeMinutes > 0 ) {
     let nowTime = new Date().getTime();
     this.timeSeconds = this.seconds;
     localStorage.setItem("startTime1", nowTime);
     this.timeMinutes--;
     localStorage.setItem("startTime2", this.timeMinutes);
    } else if (this.timeMinutes == 0 && this.timeSeconds == 0) {
     this.timeSeconds = 0;
     this.clear();
     alert("考试时间到");
    } else {
     this.timeSeconds--;
    }
   }, 1000);
  }
 },
 mounted() {
  if (sessionStorage.getItem("answered") != 1) {
   this.timing();
  }
 },
 computed: {
  timerCount1() {
   return this.timeSeconds < 10 ? "0" + this.timeSeconds : "" + this.timeSeconds;
  },
  timerCount2() {
   return this.timeMinutes < 10 ? "0" + this.timeMinutes : "" + this.timeMinutes;
  }
 },
 destroyed() {
  // 退出后清除计时器
  if (this.timer) {
   clearInterval(this.timer);
  }
 }
};
</script>
<style scoped>
.time {
 color: #f72a3a;
 font-weight: bold;
 font-size: 26px;
}
</style>

到此这篇关于Vue 封装防刷新考试倒计时组件的实现的文章就介绍到这了,更多相关Vue 防刷新考试倒计时组件内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Javascript 相关文章推荐
javascript 拖动表格行实现代码
May 05 Javascript
了不起的node.js读书笔记之mongodb数据库交互
Dec 22 Javascript
jquery 插件实现瀑布流图片展示实例
Apr 03 Javascript
Javascript实现计算个人所得税
May 10 Javascript
Angular2 多级注入器详解及实例
Oct 30 Javascript
原生JS实现图片轮播效果
Dec 26 Javascript
js 判断数据类型的几种方法
Jan 13 Javascript
React 子组件向父组件传值的方法
Jul 24 Javascript
浅谈AngularJs 双向绑定原理(数据绑定机制)
Dec 07 Javascript
关于微信小程序map组件z-index的层级问题分析
Jul 09 Javascript
jQuery插件实现图片轮播效果
Oct 19 jQuery
详解Vue.js 可拖放文本框组件的使用
Mar 03 Vue.js
webpack 如何同时输出压缩和未压缩的文件的实现步骤
Jun 05 #Javascript
vue使用nprogress加载路由进度条的方法
Jun 04 #Javascript
JS+canvas五子棋人机对战实现步骤详解
Jun 04 #Javascript
JS删除数组指定值常用方法详解
Jun 04 #Javascript
Vue项目接入Paypal实现示例详解
Jun 04 #Javascript
Paypal支付不完全指北
Jun 04 #Javascript
微信小程序学习总结(五)常见问题实例小结
Jun 04 #Javascript
You might like
咖啡豆分级制度 咖啡豆等级分类 咖啡豆是按口感分类的吗?
2021/03/05 新手入门
高亮度显示php源代码
2006/10/09 PHP
phpmyadmin中配置文件现在需要绝密的短语密码的解决方法
2007/02/11 PHP
PHP中基本符号及使用方法
2010/03/23 PHP
PHP连接SQLServer2005的实现方法(附ntwdblib.dll下载)
2012/07/02 PHP
CI(CodeIgniter)模型用法实例分析
2016/01/20 PHP
PHP函数nl2br()与自定义函数nl2p()换行用法分析
2016/04/02 PHP
jQuery中与toggleClass等价的程序段 以及未来学习的方向
2010/03/18 Javascript
js href的用法
2010/05/13 Javascript
一个关于jqGrid使用的小例子(行按钮)
2011/11/04 Javascript
jquery文字上下滚动的实现方法
2013/03/22 Javascript
struts2+jquery组合验证注册用户是否存在
2014/04/30 Javascript
浅谈JsonObject中的key-value数据解析排序问题
2017/12/06 Javascript
详解@Vue/Cli 3 Invalid Host header 错误解决办法
2019/01/02 Javascript
Webpack4 使用Babel处理ES6语法的方法示例
2019/03/07 Javascript
JavaScript封装单向链表的示例代码
2020/09/17 Javascript
[03:47]2015国际邀请赛第三日现场精彩回顾
2015/08/08 DOTA
[01:10:49]Secret vs VGJ.S 2018国际邀请赛淘汰赛BO3 第二场 8.24
2018/08/25 DOTA
Python中os和shutil模块实用方法集锦
2014/05/13 Python
python获取远程图片大小和尺寸的方法
2015/03/26 Python
在Python程序和Flask框架中使用SQLAlchemy的教程
2016/06/06 Python
python实现基于朴素贝叶斯的垃圾分类算法
2019/07/09 Python
对python中url参数编码与解码的实例详解
2019/07/25 Python
python实现XML解析的方法解析
2019/11/16 Python
Python3如何在Windows和Linux上打包
2020/02/25 Python
python 读取串口数据的示例
2020/11/09 Python
CSS3 实现的火焰动画
2020/12/07 HTML / CSS
StubHub哥伦比亚:购买和出售您的门票
2016/10/20 全球购物
英国在线照明超市:Castlegate Lights
2019/10/30 全球购物
研究生自荐信
2013/10/09 职场文书
个人收入证明范本
2014/01/12 职场文书
如何打造一封优秀的留学推荐信
2014/01/25 职场文书
机工车间主任岗位职责
2014/03/05 职场文书
护士自我推荐信范文
2015/03/24 职场文书
大学军训通讯稿(2016最新版)
2015/12/21 职场文书
辞职信怎么写?你都知道吗?
2019/06/24 职场文书