047:vue加载循环倒计时 示例


第047个

查看专栏目录: VUE ------ element UI

专栏目标

在vue和element UI联合技术栈的操控下,本专栏提供行之有效的源代码示例和信息点介绍,做到灵活运用。

(1)提供vue2的一些基本操作:安装、引用,模板使用,computed,watch,生命周期(beforeCreate,created,beforeMount,mounted, beforeUpdate,updated, beforeDestroy,destroyed,activated,deactivated,errorCaptured,components,)、 root , parent , children , slots , refs , props, emit , eventbus ,provide / inject, Vue.observable, listeners, attrs, nextTick , v-for, v-if, v-else,v-else-if,v-on,v-pre,v-cloak,v-once,v-model, v-html, v-text, keep-alive,slot-scope, filters, v-bind,.stop, .native, directives,mixin,render,国际化,Vue Router等 (2)提供element UI的经典操作:安装,引用,国际化,el-row,el-col,el-button,el-link,el-radio,el-checkbox ,el-input,el-select, el-cascader, el-input-number, el-switch,el-slider, el-time-picker, el-date-picker, el-upload, el-rate, el-color-picker, el-transfer, el-form, el-table, el-tree, el-pagination,el-badge,el-avatar,el-skeleton, el-empty, el-descriptions, el-result, el-statistic, el-alert, v-loading, message, alert, prompt, confirm , notify, el-breadcrumb, el-page-header,el-tabs ,el-dropdown,el-steps,el-dialog, el-tooltip, el-popover, el-popconfirm, el-card, el-carousel, el-collapse, el-timeline, el-divider, el-calendar, el-image, el-backtop,v-infinite-scroll, el-drawer等

本文章目录

应用场景

vue项目中,有很多时候我们需要做倒计时相关的应用。如果是多个倒计时,需要做一个循环,下面这个示例是如何显示倒计时的方法。

示例效果

示例源代码(共108行)

javascript 复制代码
/*
* @Author: 大剑师兰特(xiaozhuanlan),还是大剑师兰特(CSDN)
* @此源代码版权归大剑师兰特所有,可供学习或商业项目中借鉴,未经授权,不得重复地发表到博客、论坛,问答,git等公共空间或网站中。
* @Email: [email protected]
* @weixin: gis-dajianshi
* @First published in CSDN
* @First published time: 2023-12-10
*/

<template>
	<div class="djs-box">
		<div class="topBox">
			<h3>vue加载循环倒计时</h3>
			<div>大剑师兰特, 还是大剑师兰特,gis-dajianshi</div>
		</div>
		<div class="dajianshi">
			<div v-for="(item,index) in nowspec" :key="item.specId"> 
					<p > 
						<span>倒计时:</span> 
						<span style="margin-left:5px;color:#A43534;font-weight:450">{{ timeChange(item.countDown)}}</span> 
					</p> 
			</div> 
		</div>
	</div>
</template>

<script> 
    export default ({ 
        data() { 
            return { 
                nowspec: [{ 
                        specId:1, 
                        start: "2023-12-20 19:23:26", 
                        countDown: 50 
                    }, 
                    {   specId:2, 
                        start: "2023-12-20 19:23:26", 
                        countDown: 1000 
                    }, 
                ], 
                timer: null, 
            } 
        }, 
        created() { 
            if (this.timer) { //这一段是防止进入页面出去后再进来计时器重复启动 
                clearInterval(this.timer); 
            } 
        }, 
        mounted() { 
            this.beginTimer(); 
        }, 
        methods: { 
            beginTimer() { //这个计时器是每秒减去数组中指定字段的时间 
                this.timer = setInterval(() => { 
                    for (let i = 0, len = this.nowspec.length; i < len; i++) { 
                        const item = this.nowspec[i]; 
                        if (item.countDown > 0) { 
                            item.countDown = item.countDown - 1; //我这里后台返回的是秒数,如果是日期需要自己转换一下 
                        } 
                    } 
                }, 1000); 
            }, 
            timeChange(countDown) { 
                var $that = this; 
                if (countDown < 0) { 
                    clearInterval(setInterval(this.timeChange(countDown), 1000)); 
                     return "已经发射" 
                }else{ 
                //求天时分秒 leftDate是毫秒 
                let leftSecond = $that.fillNumber(countDown % 60); 
                let leftMinute = $that.fillNumber((countDown / 60) % 60); 
                let leftHours = $that.fillNumber((countDown / (60 * 60)) % 24); 


                let leftDay = $that.fillNumber(countDown / (60 * 60) / 24); 
                return leftDay + " 天 " + leftHours + " 小时 " + leftMinute + " 分 " + leftSecond + " 秒 "; 
                } 
            }, 
            fillNumber(num) { 
                let number = Math.floor(num); //向下取整 
                return number > 9 ? number : "0" + number; 
            }, 
        } 
    }) 
</script> 
<style scoped>
	.djs-box {
		width: 900px;
		height: 600px;
		margin: 50px auto;
		border: 1px solid seagreen;
	}

	.topBox {
		margin: 0 auto 0px;
		padding: 10px 0;
		background:purple;
		color: #fff;
	}
    .dajianshi{
		margin-top: 100px;
		width: 100%;
		height:400px;
	}

</style>
相关推荐
香蕉可乐荷包蛋4 小时前
浅入ES5、ES6(ES2015)、ES2023(ES14)版本对比,及使用建议---ES6就够用(个人觉得)
前端·javascript·es6
未来之窗软件服务5 小时前
资源管理器必要性———仙盟创梦IDE
前端·javascript·ide·仙盟创梦ide
西哥写代码6 小时前
基于cornerstone3D的dicom影像浏览器 第十八章 自定义序列自动播放条
前端·javascript·vue
清风细雨_林木木6 小时前
Vue 中生成源码映射文件,配置 map
前端·javascript·vue.js
雪芽蓝域zzs7 小时前
JavaScript splice() 方法
开发语言·javascript·ecmascript
森叶8 小时前
Electron 主进程中使用Worker来创建不同间隔的定时器实现过程
前端·javascript·electron
霸王蟹8 小时前
React 19 中的useRef得到了进一步加强。
前端·javascript·笔记·学习·react.js·ts
霸王蟹8 小时前
React 19版本refs也支持清理函数了。
前端·javascript·笔记·react.js·前端框架·ts
繁依Fanyi8 小时前
ColorAid —— 一个面向设计师的色盲模拟工具开发记
开发语言·前端·vue.js·编辑器·codebuddy首席试玩官
codelxy8 小时前
vue引用cesium,解决“Not allowed to load local resource”报错
javascript·vue.js