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之十四 (触发事件核心方法)
Aug 23 Javascript
js 单击式的下拉菜单效果实例
Aug 13 Javascript
jQuery简单tab切换效果实现方法
Apr 08 Javascript
jQuery的事件委托实例分析
Jul 15 Javascript
JS前端笔试题分析
Dec 19 Javascript
JavaScript转换数据库DateTime字段类型方法
Jun 27 Javascript
深入理解Vue.js源码之事件机制
Sep 27 Javascript
nginx+vue.js实现前后端分离的示例代码
Feb 12 Javascript
ionic grid(栅格)九宫格制作详解
Jun 30 Javascript
jQuery实现的淡入淡出图片轮播效果示例
Aug 29 jQuery
Vue CLI项目 axios模块前后端交互的使用(类似ajax提交)
Sep 01 Javascript
细说webpack6 Babel的使用详解
Sep 26 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 ajax 分页类代码
2008/11/13 PHP
discuz的php防止sql注入函数
2011/01/17 PHP
PHP目录操作实例总结
2016/09/27 PHP
php实现用户登陆简单实例
2017/04/04 PHP
PHP封装的PDO数据库操作类实例
2017/06/21 PHP
源码分析 Laravel 重复执行同一个队列任务的原因
2017/12/25 PHP
你可能不再需要JQUERY
2021/03/09 Javascript
js单词形式的运算符
2014/05/06 Javascript
jquery中获得元素尺寸和坐标的方法整理
2014/05/18 Javascript
JS获取当前脚本文件的绝对路径
2016/03/02 Javascript
JavaScript实现解析INI文件内容的方法
2016/11/17 Javascript
详解nodejs 文本操作模块-fs模块(一)
2016/12/22 NodeJs
js实现百度登录框鼠标拖拽效果
2017/03/07 Javascript
Node之简单的前后端交互(实例讲解)
2017/11/14 Javascript
jQuery基于闭包实现的显示与隐藏div功能示例
2018/06/09 jQuery
React 项目迁移 Webpack Babel7的实现
2018/09/12 Javascript
Jquery的autocomplete插件用法及参数讲解
2019/03/12 jQuery
Vue Element UI + OSS实现上传文件功能
2019/07/31 Javascript
微信小程序实现抖音播放效果的实例代码
2020/04/11 Javascript
vue通过过滤器实现数据格式化
2020/07/20 Javascript
[39:00]Optic vs VP 2018国际邀请赛淘汰赛BO3 第三场 8.24
2018/08/25 DOTA
django 常用orm操作详解
2017/09/13 Python
Python实现自定义函数的5种常见形式分析
2018/06/16 Python
Python如何基于smtplib发不同格式的邮件
2019/12/30 Python
pytorch 实现查看网络中的参数
2020/01/06 Python
简单了解python filter、map、reduce的区别
2020/01/14 Python
Python中猜拳游戏与猜筛子游戏的实现方法
2020/09/04 Python
Python 如何实现数据库表结构同步
2020/09/29 Python
python爬虫泛滥的解决方法详解
2020/11/25 Python
python中uuid模块实例浅析
2020/12/29 Python
实例教程 一款纯css3实现的数字统计游戏
2014/11/10 HTML / CSS
纯css3实现的鼠标悬停动画按钮
2014/12/23 HTML / CSS
详解使用postMessage解决iframe跨域通信问题
2019/11/01 HTML / CSS
英国网上花店:Bunches
2016/11/29 全球购物
班主任先进事迹材料
2014/12/17 职场文书
联欢会开场白
2015/06/01 职场文书