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 相关文章推荐
jquery中的 $(&quot;#jb51&quot;)与document.getElementById(&quot;jb51&quot;) 的区别
Jul 26 Javascript
可自己添加html的伪弹出框实现代码
Sep 08 Javascript
node.js中使用socket.io制作命名空间
Dec 15 Javascript
全国省市二级联动下拉菜单 js版
May 10 Javascript
jquery移除了live()、die(),新版事件绑定on()、off()的方法
Oct 26 Javascript
微信小程序 删除项目工程实现步骤
Nov 10 Javascript
微信小程序 form组件详解及简单实例
Jan 10 Javascript
详解vue-cli中配置sass
Jun 21 Javascript
es6中比较有用的7个技巧小结
Jul 12 Javascript
使用JavaScript获取Django模板指定键值数据
May 27 Javascript
Vue记住滚动条和实现下拉加载的完美方法
Jul 31 Javascript
JS removeAttribute()方法实现删除元素的某个属性
Jan 11 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
真正面向对象编程:PHP5.01发布
2006/10/09 PHP
PHP开发制作一个简单的活动日程表Calendar
2016/06/20 PHP
php设计模式之策略模式应用案例详解
2019/06/17 PHP
JS判断元素为数字的奇异写法分享
2012/08/01 Javascript
如何将网页表格内容导入excel
2014/02/18 Javascript
jQuery分组选择器用法实例
2014/12/23 Javascript
jQuery.Callbacks()回调函数队列用法详解
2016/06/14 Javascript
详解JavaScript中的属性和特性
2016/12/08 Javascript
JS去掉字符串前后空格或去掉所有空格的用法
2017/03/25 Javascript
详解vue2.0 使用动态组件实现 Tab 标签页切换效果(vue-cli)
2017/08/30 Javascript
Angular实现表单验证功能
2017/11/13 Javascript
laravel5.3 vue 实现收藏夹功能实例详解
2018/01/21 Javascript
vue升级之路之vue-router的使用教程
2018/08/14 Javascript
vue-cli3脚手架的配置及使用教程
2018/08/28 Javascript
ES6中Set和Map数据结构,Map与其它数据结构互相转换操作实例详解
2019/02/28 Javascript
HTML+JavaScript实现扫雷小游戏
2019/09/30 Javascript
node.js express框架实现文件上传与下载功能实例详解
2019/10/15 Javascript
简单了解JavaScript arguement原理及作用
2020/05/28 Javascript
python django集成cas验证系统
2014/07/14 Python
web.py在模板中输出美元符号的方法
2014/08/26 Python
Python 中 Meta Classes详解
2016/02/13 Python
pandas把dataframe转成Series,改变列中值的类型方法
2018/04/10 Python
Python列表常见操作详解(获取,增加,删除,修改,排序等)
2019/02/18 Python
Python 实现数据结构-循环队列的操作方法
2019/07/17 Python
python使用pygame实现笑脸乒乓球弹珠球游戏
2019/11/25 Python
PyCharm汉化安装及永久激活详细教程(靠谱)
2020/01/16 Python
canvas 绘图时位置偏离的问题解决
2020/09/16 HTML / CSS
美国校园市场:OCM
2017/06/08 全球购物
护士自荐信
2013/10/25 职场文书
医学专业本科毕业生自我鉴定
2013/12/28 职场文书
学校大课间活动方案
2014/01/30 职场文书
《池塘边的叫声》教学反思
2014/04/12 职场文书
麦田里的守望者读书笔记
2015/06/30 职场文书
MySQL非空约束(not null)案例讲解
2021/08/23 MySQL
【2·13】一图读懂中国无线电发展
2022/02/18 无线电
浅谈Redis缓冲区机制
2022/06/05 Redis