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 写类方式之五
Jul 05 Javascript
详解AngularJS中的表单验证(推荐)
Nov 17 Javascript
canvas时钟效果
Feb 16 Javascript
JavaScript中值类型和引用类型的区别
Feb 23 Javascript
Angular2使用Angular-CLI快速搭建工程(二)
May 21 Javascript
vuejs实现本地数据的筛选分页功能思路详解
Nov 15 Javascript
详解vue-cli脚手架build目录中的dev-server.js配置文件
Nov 24 Javascript
基于angular6.0实现的一个组件懒加载功能示例
Apr 12 Javascript
详解vuex的简单todolist例子
Jul 14 Javascript
JsonServer安装及启动过程图解
Feb 28 Javascript
jQuery实现计算器功能
Oct 19 jQuery
vue-treeselect的基本用法以及解决点击无法出现拉下菜单
Apr 30 Vue.js
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垃圾回收机制简单说明
2010/07/22 PHP
解析PHP提交后跳转
2013/06/23 PHP
测试PHP连接MYSQL成功与否的代码
2013/08/16 PHP
Apache PHP MySql安装配置图文教程
2016/08/27 PHP
TP5(thinkPHP5)框架基于ajax与后台数据交互操作简单示例
2018/09/03 PHP
JS运行耗时操作的延时显示方法
2010/11/19 Javascript
js获取指定的cookie的具体实现
2014/02/20 Javascript
js window对象属性和方法相关资料整理
2015/11/11 Javascript
七个不允许错过的jQuery小技巧
2015/12/21 Javascript
AngularJS实现ajax请求的方法
2016/11/22 Javascript
使用JS实现气泡跟随鼠标移动的动画效果
2017/09/16 Javascript
完美解决iview 的select下拉框选项错位的问题
2018/03/02 Javascript
vue观察模式浅析
2018/09/25 Javascript
mpvue微信小程序多列选择器用法之省份城市选择的实现
2019/03/07 Javascript
vue生命周期的探索
2019/04/03 Javascript
快速解决layui弹窗按enter键不停弹窗的问题
2019/09/18 Javascript
Vue数字输入框组件的使用方法
2019/10/19 Javascript
mpvue微信小程序开发之实现一个弹幕评论
2019/11/24 Javascript
JS插件amCharts实现绘制柱形图默认显示数值功能示例
2019/11/26 Javascript
js实现选项卡效果
2020/03/07 Javascript
vue cli 3.0通用打包配置代码,不分一二级目录
2020/09/02 Javascript
python通过邮件服务器端口发送邮件的方法
2015/04/30 Python
十个Python程序员易犯的错误
2015/12/15 Python
Python内建模块struct实例详解
2018/02/02 Python
python字符串判断密码强弱
2020/03/18 Python
python中time.ctime()实例用法
2021/02/03 Python
美国购车网站:TrueCar
2016/10/19 全球购物
ebookers英国:隶属全球最大的在线旅游公司Expedia
2017/12/28 全球购物
当文件系统受到破坏时,如何检查和修复系统?
2012/03/09 面试题
《大作家的小老师》教学反思
2014/04/16 职场文书
2015年社区创卫工作总结
2015/04/21 职场文书
赤壁观后感(2)
2015/06/15 职场文书
篮球拉拉队口号
2015/12/25 职场文书
公证书
2019/04/17 职场文书
python实现web邮箱扫描的示例(附源码)
2021/03/30 Python
Apache Pulsar结合Hudi构建Lakehouse方案分析
2022/03/31 Servers