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具有类似Lambda表达式编程能力的代码(改进版)
Sep 14 Javascript
jQuery:delegate中select()不起作用的解决方法(实例讲解)
Jan 26 Javascript
深入理解Java线程编程中的阻塞队列容器
Dec 07 Javascript
js判断手机访问或者PC的几个例子(常用于手机跳转)
Dec 15 Javascript
使用javascript插入样式
Mar 14 Javascript
原生JS实现旋转木马式图片轮播插件
Apr 25 Javascript
ES6解构赋值的功能与用途实例分析
Oct 31 Javascript
vue 项目如何引入微信sdk接口的方法
Dec 18 Javascript
关于Angularjs中自定义指令一些有价值的细节和技巧小结
Apr 22 Javascript
详解Puppeteer前端自动化测试实践
Feb 21 Javascript
微信小程序实现拖拽功能
Sep 26 Javascript
vue组件入门知识全梳理
Sep 21 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 设计模式之观察者模式介绍
2012/02/22 PHP
php在线代理转向代码
2012/05/05 PHP
PHP面向对象的进阶学习(抽像类、接口、final、类常量)
2012/05/07 PHP
既简单又安全的PHP验证码 附调用方法
2016/06/02 PHP
微信公众平台开发教程⑤ 微信扫码支付模式介绍
2019/04/10 PHP
PHP二维索引数组的遍历实例分析【2种方式】
2019/06/24 PHP
php设计模式之组合模式实例详解【星际争霸游戏案例】
2020/03/27 PHP
javascript replace()正则替换实现代码
2010/02/26 Javascript
Javascript aop(面向切面编程)之around(环绕)分析
2015/05/01 Javascript
JavaScript实现把rgb颜色转换成16进制颜色的方法
2015/06/01 Javascript
jQuery检查事件是否触发的方法
2015/06/26 Javascript
javascript实现加载xml文件的方法
2015/11/24 Javascript
深入学习jQuery Validate表单验证
2016/01/18 Javascript
基于jquery实现图片放大功能
2016/05/07 Javascript
一种Javascript解释ajax返回的json的好方法(推荐)
2016/06/02 Javascript
node.js(express)中使用Jcrop进行图片剪切上传功能
2017/04/21 Javascript
Vue如何从1.0迁移到2.0
2017/10/19 Javascript
手动下载Chrome并解决puppeteer无法使用问题
2018/11/12 Javascript
移动端如何用下拉刷新的方式实现上拉加载
2018/12/10 Javascript
jquery实现两个div中的元素相互拖动的方法分析
2020/04/05 jQuery
Vue实现简单计算器
2021/01/20 Vue.js
python实现class对象转换成json/字典的方法
2016/03/11 Python
Python正则表达式教程之三:贪婪/非贪婪特性
2017/03/02 Python
python+selenium识别验证码并登录的示例代码
2017/12/21 Python
使用python编写简单的小程序编译成exe跑在win10上
2018/01/15 Python
python实现桌面壁纸切换功能
2019/01/21 Python
python实现合并多个list及合并多个django QuerySet的方法示例
2019/06/11 Python
Python使用requests xpath 并开启多线程爬取西刺代理ip实例
2020/03/06 Python
解决更改AUTH_USER_MODEL后出现的问题
2020/05/14 Python
python 实现简易的记事本
2020/11/30 Python
css3的transform中scale缩放详解
2014/12/08 HTML / CSS
非常震撼的纯CSS3人物行走动画
2016/02/24 HTML / CSS
html5借用repeating-linear-gradient实现一把刻度尺(ruler)
2019/09/09 HTML / CSS
消防安全宣传标语
2014/06/07 职场文书
2015年十月一日放假通知
2015/08/18 职场文书
浅谈自定义校验注解ConstraintValidator
2021/06/30 Java/Android