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: 2909222303@qq.com
* @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>
相关推荐
王哲晓39 分钟前
第三十章 章节练习商品列表组件封装
前端·javascript·vue.js
理想不理想v44 分钟前
‌Vue 3相比Vue 2的主要改进‌?
前端·javascript·vue.js·面试
酷酷的阿云1 小时前
不用ECharts!从0到1徒手撸一个Vue3柱状图
前端·javascript·vue.js
aPurpleBerry2 小时前
JS常用数组方法 reduce filter find forEach
javascript
GIS程序媛—椰子2 小时前
【Vue 全家桶】7、Vue UI组件库(更新中)
前端·vue.js
ZL不懂前端2 小时前
Content Security Policy (CSP)
前端·javascript·面试
乐闻x2 小时前
ESLint 使用教程(一):从零配置 ESLint
javascript·eslint
我血条子呢3 小时前
[Vue]防止路由重复跳转
前端·javascript·vue.js
半开半落3 小时前
nuxt3安装pinia报错500[vite-node] [ERR_LOAD_URL]问题解决
前端·javascript·vue.js·nuxt