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 相关文章推荐
js下拉菜单语言选项简单实现
Sep 23 Javascript
js数组操作常用方法
May 08 Javascript
javascript截取字符串小结
Apr 28 Javascript
js实现的倒计时按钮实例
Jun 24 Javascript
Fullpage.js固定导航栏-实现定位导航栏
Mar 17 Javascript
iframe中使用jquery进行查找的方法【案例分析】
Jun 17 Javascript
AngularJS ng-template寄宿方式用法分析
Nov 07 Javascript
详解React Native 采用Fetch方式发送跨域POST请求
Nov 15 Javascript
javascript 原型与原型链的理解及应用实例分析
Feb 10 Javascript
vue项目中使用vue-layer弹框插件的方法
Mar 11 Javascript
vue递归获取父元素的元素实例
Aug 07 Javascript
jQuery实现鼠标拖拽登录框移动效果
Sep 13 jQuery
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
如何获得PHP相关资料
2006/10/09 PHP
常用表单验证类,有了这个,一般的验证就都齐了。
2006/12/06 PHP
IIS6的PHP最佳配置方法
2007/03/19 PHP
vs中通过剪切板循环来循环粘贴不同内容
2011/04/30 PHP
使用php语句将数据库*.sql文件导入数据库
2014/05/05 PHP
PHP连接sql server 2005环境配置及问题解决
2014/08/08 PHP
PHP图片加水印实现方法
2016/05/06 PHP
学习PHP Cookie处理函数
2016/08/09 PHP
PHP单例模式与工厂模式详解
2017/08/29 PHP
取键盘键位ASCII码的网页
2007/07/30 Javascript
jquery限制输入字数,并提示剩余字数实现代码
2012/12/24 Javascript
用unescape反编码得出汉字示例
2014/04/24 Javascript
javascript实现详细时间提醒信息效果的方法
2015/03/11 Javascript
通过JS判断联网类型和连接状态的实现代码
2015/04/01 Javascript
浅析nodejs实现Websocket的数据接收与发送
2015/11/19 NodeJs
Bootstrap每天必学之级联下拉菜单
2016/03/27 Javascript
Bootstrap基本组件学习笔记之下拉菜单(7)
2016/12/07 Javascript
jQuery中值得注意的trigger方法浅析
2016/12/12 Javascript
AngularJs点击状态值改变背景色的实例
2017/12/18 Javascript
Vue实现计算器计算效果
2020/08/17 Javascript
Python字典简介以及用法详解
2016/11/15 Python
Python编程之string相关操作实例详解
2017/07/22 Python
python之pandas用法大全
2018/03/13 Python
对python 操作solr索引数据的实例详解
2018/12/07 Python
对python文件读写的缓冲行为详解
2019/02/13 Python
对Django项目中的ORM映射与模糊查询的使用详解
2019/07/18 Python
Pycharm debug调试时带参数过程解析
2020/02/03 Python
Python模拟伯努利试验和二项分布代码实例
2020/05/27 Python
IE滤镜与CSS3效果(详细整理分享)
2013/01/25 HTML / CSS
H&M美国官网:欧洲最大的服饰零售商
2016/09/07 全球购物
八年级语文教学反思
2014/02/11 职场文书
高考寄语大全
2014/04/08 职场文书
优秀毕业生求职信
2014/06/05 职场文书
工程竣工验收申请报告
2015/05/15 职场文书
谢师宴家长致辞
2015/07/27 职场文书
基于Redission的分布式锁实战
2022/08/14 Redis