Vue 倒计时组件封装
项目中需要用到倒计时的功能,封装了一个组件。
代码解读:
- 1:created周期中获取传入参数时间的剩余秒数: this.initSecondsLeft() 并绑定间隔事件 intervalEvent
- 2: 在computed属性中刷新当前剩余时间的结果
- 3: 结束后触发父组件的handle-done事件,父组件做出对应操作,如弹窗或信息提示
<template>
<div>
<div style="text-align:center;color:red;">
<h2>{{showTimeLeft}}</h2>
</div>
<div style="text-align:center;color:green;">
<h2>{{showTimeLeft}}</h2>
</div>
</div>
</template>
<script>
export default {
name: "timeCountDown",
props: {
endDate: String,
},
data() {
return {
timeLeft: 0,
bundleIntervalEvent: ""
};
},
computed: {
//用计算属性显示结果
showTimeLeft() {
//剩余秒数<=0
if (this.timeLeft <= 0) {
// 结束event
this.$emit('handle-done', true)
return "已过期";
}
// 剩余秒数>0
else {
let day = Math.floor(this.timeLeft / 86400);
let hour = Math.floor((this.timeLeft % 86400) / 3600);
let min = Math.floor(((this.timeLeft % 86400) % 3600) / 60);
let sec = Math.floor(((this.timeLeft % 86400) % 3600) % 60);
return (day + "天 " + (hour < 10 ? "0" : "") + hour + ": " + (min < 10 ? "0" : "") + min + ": " + (sec < 10 ? "0" : "") + sec
);
}
}
},
methods: {
//和当前日期比较,计算剩余多少秒
initSecondsLeft() {
let currentDate = new Date();
let tmp = this.endDate.split(/[- : /]/);
let toEndDate = new Date(tmp[0], tmp[1] - 1, tmp[2], tmp[3], tmp[4], tmp[5]);
//参数日期 > 当前日期 => 获取剩余秒数
if (toEndDate > currentDate) {
this.timeLeft = Math.floor((toEndDate.getTime() - currentDate.getTime()) / 1000);
} else {
this.timeLeft = 0;
}
},
//间隔事件: 剩余秒数--, 当剩余秒数为0时,清除间隔事件.
intervalEvent() {
if (this.timeLeft > 0) {
this.timeLeft--;
} else {
clearInterval(this.bundleIntervalEvent);
}
},
},
mounted() {
},
created() {
//初始化剩余秒数
this.initSecondsLeft();
//执行间隔事件.
this.bundleIntervalEvent = setInterval(this.intervalEvent, 1000);
},
beforeDestroy() {
clearInterval(this.bundleIntervalEvent);
}
};
</script>
Vue 倒计时组件封装的更多相关文章
- vue 倒计时组件
<template> <span> <i v-text="msg"></i> </span></template& ...
- Vue回炉重造之封装防刷新考试倒计时组件
<!-- 考试倒计时组件 --> <template> <div class="time"> <p>00:{{timerCount2 ...
- Vue.js 自定义组件封装实录——基于现有控件的二次封装(以计时器为例)
在本人着手开发一个考试系统的过程中,出现了如下一个需求:制作一个倒计时的控件显示在试卷页面上.本文所记录的就是这样的一个过程. 前期工作 对于这个需求,自然我想到的是有没有现成的组件可以直接使用(本着 ...
- Vue + Element UI 实现权限管理系统 (功能组件封装)
组件封装 为了避免组件代码的臃肿,这里对主要的功能部件进行封装,保证代码的模块化和简洁度. 组件结构 组件封装重构后,试图组件结构如下图所示 代码一览 Home组件被简化,包含导航.头部和主内容三个组 ...
- Vue + Element UI 实现权限管理系统 前端篇(七):功能组件封装
组件封装 为了避免组件代码的臃肿,这里对主要的功能部件进行封装,保证代码的模块化和简洁度. 组件结构 组件封装重构后,试图组件结构如下图所示 代码一览 Home组件被简化,包含导航.头部和主内容三个组 ...
- seventBus(封装) 一个巧妙的解决vue同级组件通讯的思路
如果在你项目中需要多处用到同级组件通讯,而又不想去写繁琐的vuex,可以参考这个小思路.本人在写项目中琢磨出来的,感觉挺好用,分享一下. 1.在utils文件夹下添加BusEvent.js 注释已经很 ...
- vue --》组件的封装 及 参数的传递
vue组件的定义 ● 组件(Component)是Vue.js最强大的功能之一 ● 组件可以扩展HTML元素,封装可重用代码 ● 在较高层面上,组件是自定义元素,Vue.js的编译器为他添加特殊功能 ...
- 循序渐进VUE+Element 前端应用开发(20)--- 使用组件封装简化界面代码
VUE+Element 前端应用,比较不错的一点就是界面组件化,我们可以根据重用的指导方针,把界面内容拆分为各个不同的组合,每一个模块可以是一个组件,也可以是多个组件的综合体,而且这一个过程非常方便. ...
- vue cli3.0 封装组件全局引入js文件并发布到npm
首先用 vue create创建一个项目 当前的项目目录是这样的: 首先需要创建一个 packages 目录,用来存放组件 然后将 src 目录改为 examples 用作示例 二.修改配置 启动项目 ...
随机推荐
- 查看锁信息 v$lock 和 v$locked_object
查看锁住的对象及会话id,serial# select a.* from (SELECT o.object_name, l.locked_mode, ...
- 史上最全SpringBoot整合Mybatis案例
摘要:如果小编说,SpringBoot是目前为止最好的框架,应该没有人会反驳吧?它的出现使得我们很容易就能搭建一个新应用.那么,SpringBoot与其他第三方框架的整合必定是我们需要关注的重点. 开 ...
- UVALive - 3644 X-Plosives (并查集)
A secret service developed a new kind of explosive that attain its volatile property only when a spe ...
- C++语法小记---运算符重载
运算符重载 运算符重载的本质也是对已有功能的扩展 运算符重载的本质就是函数重载,只是函数变成了 operator + 运算符 当成员函数和全局函数对运算符进行重载时,优先调用成员函数 运算符重载为成员 ...
- 性能1.84倍于Ceph!网易数帆Curve分布式存储开源
在上周刚结束的网易数字+大会上 网易数帆宣布: 开源一款名为Curve的高性能分布式存储系统, 性能可达Ceph的1.84倍! 网易副总裁.网易杭州研究院执行院长兼网易数帆总经理汪源: 基础软件的能力 ...
- [jvm] -- 类加载器及双亲委派模板篇
类加载器 JVM 中内置了三个重要的 ClassLoader BootstrapClassLoader(启动类加载器):最顶层的加载类,由C++实现,负责加载 %JAVA_HOME%/lib目录下的j ...
- 字符串学习总结(Hash & Manacher & KMP)
前言 终于开始学习新的东西了,总结一下字符串的一些知识. NO.1 字符串哈希(Hash) 定义 即将一个字符串转化成一个整数,并保证字符串不同,得到的哈希值不同,这样就可以用来判断一个该字串是否重复 ...
- mysql查看各表占磁盘空间
select TABLE_NAME, concat(truncate(data_length/1024/1024,2),' MB') as data_size, concat(truncate(ind ...
- Laragon修改配置快速创建其他框架的项目
配置方式 依葫芦画瓢,如添加thinkPHP: # Thinkphp Thinkphp 3.2=composer create-project topthink/thinkphp %s Thinkph ...
- vue -电子时钟
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...