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 相关文章推荐
利用location.hash实现跨域iframe自适应
May 04 Javascript
在百度知道团队中快速审批新成员的js脚本
Feb 02 Javascript
JavaScript学习笔记之Cookie对象
Jan 22 Javascript
PHPExcel中的一些常用方法汇总
Jan 23 Javascript
Jquery对新插入的节点 绑定Click事件失效的解决方法
Jun 02 Javascript
JavaScript简单实现弹出拖拽窗口(一)
Jun 17 Javascript
Angularjs手动解析表达式($parse)
Oct 12 Javascript
Android中Okhttp3实现上传多张图片同时传递参数
Feb 18 Javascript
使用travis-ci如何持续部署node.js应用详解
Jul 30 Javascript
Parcel.js + Vue 2.x 极速零配置打包体验教程
Dec 24 Javascript
解决iview打包时UglifyJs报错的问题
Mar 07 Javascript
js循环map 获取所有的key和value的实现代码(json)
May 09 Javascript
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-fpm的两种进程管理模式详解
2013/06/03 PHP
php伪静态之APACHE篇
2014/06/02 PHP
PHP实现搜索相似图片
2015/09/22 PHP
Zend Framework教程之Zend_Config_Xml用法分析
2016/03/23 PHP
Laravel 实现关系模型取出需要的字段
2019/10/10 PHP
YII2框架中日志的配置与使用方法实例分析
2020/03/18 PHP
Jquery Ajax学习实例5 向WebService发出请求,返回泛型集合数据的异步调用
2010/03/17 Javascript
JavaScript去除空格的三种方法(正则/传参函数/trim)
2013/02/06 Javascript
js操作iframe兼容各种主流浏览器示例代码
2013/07/22 Javascript
js与jquery获取父元素,删除子元素的两种不同方法
2014/01/09 Javascript
JavaScript统计字符串中每个字符出现次数完整实例
2016/01/28 Javascript
JS获取当前脚本文件的绝对路径
2016/03/02 Javascript
js实现简易垂直滚动条
2017/02/22 Javascript
AngularJS动态绑定ng-options的ng-model实例代码
2017/06/21 Javascript
浅谈原型对象的常用开发模式
2017/07/22 Javascript
Vue实现简易翻页效果源码分享
2018/11/08 Javascript
VUE 自定义组件模板的方法详解
2019/08/30 Javascript
微信小程序 冒泡事件原理解析
2019/09/27 Javascript
Vue3 的响应式和以前有什么区别,Proxy 无敌?
2020/05/20 Javascript
vue实现虚拟列表功能的代码
2020/07/28 Javascript
nuxt引入组件和公共样式的操作
2020/11/05 Javascript
教你学会使用Python正则表达式
2017/09/07 Python
python+opencv实现霍夫变换检测直线
2020/10/23 Python
Django外键(ForeignKey)操作以及related_name的作用详解
2019/07/29 Python
Python字典推导式将cookie字符串转化为字典解析
2019/08/10 Python
利用CSS3的border-radius绘制太极及爱心图案示例
2016/05/17 HTML / CSS
英国女性化妆品收纳和家具网站:Beautify
2019/12/07 全球购物
英文请假条
2014/04/11 职场文书
科级干部群众路线教育实践活动对照检查材料思想汇报
2014/09/20 职场文书
公司领导班子对照检查存在问题整改措施
2014/10/02 职场文书
自主招生自荐信格式范文
2015/03/25 职场文书
社区禁毒宣传活动总结
2015/05/07 职场文书
2015年行政执法工作总结
2015/05/23 职场文书
丧事酒宴答谢词
2015/09/30 职场文书
2016年三八节红领巾广播稿
2015/12/17 职场文书
MySQL 全文索引使用指南
2021/05/25 MySQL