项目中需要用到倒计时的功能,封装了一个组件。

代码解读:

  • 1:created周期中获取传入参数时间的剩余秒数: this.initSecondsLeft() 并绑定间隔事件 intervalEvent
  • 2: 在computed属性中刷新当前剩余时间的结果
  • 3: 结束后触发父组件的handle-done事件,父组件做出对应操作,如弹窗或信息提示
  1. <template>
  2. <div>
  3. <div style="text-align:center;color:red;">
  4. <h2>{{showTimeLeft}}</h2>
  5. </div>
  6. <div style="text-align:center;color:green;">
  7. <h2>{{showTimeLeft}}</h2>
  8. </div>
  9. </div>
  10. </template>
  11. <script>
  12. export default {
  13. name: "timeCountDown",
  14. props: {
  15. endDate: String,
  16. },
  17. data() {
  18. return {
  19. timeLeft: 0,
  20. bundleIntervalEvent: ""
  21. };
  22. },
  23. computed: {
  24. //用计算属性显示结果
  25. showTimeLeft() {
  26. //剩余秒数<=0
  27. if (this.timeLeft <= 0) {
  28. // 结束event
  29. this.$emit('handle-done', true)
  30. return "已过期";
  31. }
  32. // 剩余秒数>0
  33. else {
  34. let day = Math.floor(this.timeLeft / 86400);
  35. let hour = Math.floor((this.timeLeft % 86400) / 3600);
  36. let min = Math.floor(((this.timeLeft % 86400) % 3600) / 60);
  37. let sec = Math.floor(((this.timeLeft % 86400) % 3600) % 60);
  38. return (day + "天 " + (hour < 10 ? "0" : "") + hour + ": " + (min < 10 ? "0" : "") + min + ": " + (sec < 10 ? "0" : "") + sec
  39. );
  40. }
  41. }
  42. },
  43. methods: {
  44. //和当前日期比较,计算剩余多少秒
  45. initSecondsLeft() {
  46. let currentDate = new Date();
  47. let tmp = this.endDate.split(/[- : /]/);
  48. let toEndDate = new Date(tmp[0], tmp[1] - 1, tmp[2], tmp[3], tmp[4], tmp[5]);
  49. //参数日期 > 当前日期 => 获取剩余秒数
  50. if (toEndDate > currentDate) {
  51. this.timeLeft = Math.floor((toEndDate.getTime() - currentDate.getTime()) / 1000);
  52. } else {
  53. this.timeLeft = 0;
  54. }
  55. },
  56. //间隔事件: 剩余秒数--, 当剩余秒数为0时,清除间隔事件.
  57. intervalEvent() {
  58. if (this.timeLeft > 0) {
  59. this.timeLeft--;
  60. } else {
  61. clearInterval(this.bundleIntervalEvent);
  62. }
  63. },
  64. },
  65. mounted() {
  66. },
  67. created() {
  68. //初始化剩余秒数
  69. this.initSecondsLeft();
  70. //执行间隔事件.
  71. this.bundleIntervalEvent = setInterval(this.intervalEvent, 1000);
  72. },
  73. beforeDestroy() {
  74. clearInterval(this.bundleIntervalEvent);
  75. }
  76. };
  77. </script>

Vue 倒计时组件封装的更多相关文章

  1. vue 倒计时组件

    <template> <span> <i v-text="msg"></i> </span></template& ...

  2. Vue回炉重造之封装防刷新考试倒计时组件

    <!-- 考试倒计时组件 --> <template> <div class="time"> <p>00:{{timerCount2 ...

  3. Vue.js 自定义组件封装实录——基于现有控件的二次封装(以计时器为例)

    在本人着手开发一个考试系统的过程中,出现了如下一个需求:制作一个倒计时的控件显示在试卷页面上.本文所记录的就是这样的一个过程. 前期工作 对于这个需求,自然我想到的是有没有现成的组件可以直接使用(本着 ...

  4. Vue + Element UI 实现权限管理系统 (功能组件封装)

    组件封装 为了避免组件代码的臃肿,这里对主要的功能部件进行封装,保证代码的模块化和简洁度. 组件结构 组件封装重构后,试图组件结构如下图所示 代码一览 Home组件被简化,包含导航.头部和主内容三个组 ...

  5. Vue + Element UI 实现权限管理系统 前端篇(七):功能组件封装

    组件封装 为了避免组件代码的臃肿,这里对主要的功能部件进行封装,保证代码的模块化和简洁度. 组件结构 组件封装重构后,试图组件结构如下图所示 代码一览 Home组件被简化,包含导航.头部和主内容三个组 ...

  6. seventBus(封装) 一个巧妙的解决vue同级组件通讯的思路

    如果在你项目中需要多处用到同级组件通讯,而又不想去写繁琐的vuex,可以参考这个小思路.本人在写项目中琢磨出来的,感觉挺好用,分享一下. 1.在utils文件夹下添加BusEvent.js 注释已经很 ...

  7. vue --》组件的封装 及 参数的传递

    vue组件的定义 ● 组件(Component)是Vue.js最强大的功能之一 ● 组件可以扩展HTML元素,封装可重用代码 ● 在较高层面上,组件是自定义元素,Vue.js的编译器为他添加特殊功能 ...

  8. 循序渐进VUE+Element 前端应用开发(20)--- 使用组件封装简化界面代码

    VUE+Element 前端应用,比较不错的一点就是界面组件化,我们可以根据重用的指导方针,把界面内容拆分为各个不同的组合,每一个模块可以是一个组件,也可以是多个组件的综合体,而且这一个过程非常方便. ...

  9. vue cli3.0 封装组件全局引入js文件并发布到npm

    首先用 vue create创建一个项目 当前的项目目录是这样的: 首先需要创建一个 packages 目录,用来存放组件 然后将 src 目录改为 examples 用作示例 二.修改配置 启动项目 ...

随机推荐

  1. OSCP Learning Notes - Overview

    Prerequisites: Knowledge of scripting languages(Bash/Pyhon) Understanding of basic networking concep ...

  2. 二进制图片blob数据转canvas

    javascript是有操作二进制文件的方法的,在这里就不详述了. 而AJAX的核心XMLHttpRequest也可以获取服务端给的二进制Blob. 可以参考: XMLHttpRequest Leve ...

  3. 题解 CF13E 【Holes】

    这个题和$P3203\ $弹飞绵羊基本上完全一致 我的做法是用\(LCT\)维护信息,开一个节点\(fly\),表示到此节点时,小球会弹飞,那么查询弹多少次即为\(siz[fly]-1\) 最后一次落 ...

  4. js用正则表达式查找中文

    var content = "awfjawf测试wfewef"; var ret = /\p{Unified_Ideograph}+/u.exec(content);

  5. Flask前后端分离项目案例

    简介 学习慕课课程,Flask前后端分离API后台接口的实现demo,前端可以接入小程序,暂时已经完成后台API基础架构,使用postman调试. git 重构部分: token校验模块 auths认 ...

  6. MySQL组复制MGR(二)-- 组复制搭建

    (一)主机操作 (1)路由信息vmnet5 192.168.10.0 (2)主机信息 主机名称 IP地址 操作系统版本 数据库版本 mgr-node1 192.168.10.11 centos 7.4 ...

  7. Python数据类型-str,list常见操作

    一.字符串操作 语法:字符串名.startwith('字符串') 功能:判断字符串里是否以xxx开头 范例: 扩展:从控制台接收输入居住地址,如果地址以北京市开头,则输出北京人口,否则输入非北京人口. ...

  8. 如何在CSDN博客开头处加上版权声明?

    1.首先在CSDN账号头像处打开"管理博客"选项. 2.然后在管理博客界面左侧找到设置下面的"博客设置"选项. 3.将博客设置里的"版权声明" ...

  9. Android中的ANR问题

    ANR:(Application Not Responding) 1.为什么会产生ANR 在Android中App的相应能力是由Activity Manager和Window Manager系统服务来 ...

  10. 线程_GIL最简单的例子

    #解决多进程死循环 import multiprocessing def deadLoop(): while True: print("Hello") pass if __name ...