吉媒互动平台前端
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 

151 lines
4.8 KiB

<template name="gui-count-down">
<view class="gui-flex gui-rows gui-nowrap gui-align-items-center"
v-if="show && timer != ''">
<text class="gui-countdown-numbers gui-border"
:style="{
borderColor:borderColor,
width:size*lineHeight+'rpx', marginRight:spacing,
height:size*lineHeight+'rpx', lineHeight:size*lineHeight+'rpx', fontSize:size+'rpx',
color:fontColor, backgroundColor:bgColor}"
v-if="d > 0">{{d}}</text>
<text class="gui-countdown-splitor"
:style="{color:splitorColor, fontSize:size+'rpx', marginRight:spacing}"
v-if="d > 0">{{splitorText[0]}}</text>
<text class="gui-countdown-numbers gui-border"
:style="{
borderColor:borderColor,
width:size*lineHeight+'rpx', marginRight:spacing,
height:size*lineHeight+'rpx', lineHeight:size*lineHeight+'rpx', fontSize:size+'rpx',
color:fontColor, backgroundColor:bgColor}"
v-if="(h != '00' || zeroShow)">{{h}}</text>
<text class="gui-countdown-splitor"
:style="{color:splitorColor, fontSize:size+'rpx', marginRight:spacing}"
v-if="(h != '00' || zeroShow)">{{splitorText[1]}}</text>
<text class="gui-countdown-numbers gui-border"
:style="{
borderColor:borderColor,
width:size*lineHeight+'rpx', marginRight:spacing,
height:size*lineHeight+'rpx', lineHeight:size*lineHeight+'rpx', fontSize:size+'rpx',
color:fontColor, backgroundColor:bgColor}">{{i}}</text>
<text class="gui-countdown-splitor"
:style="{color:splitorColor, fontSize:size+'rpx', marginRight:spacing}">{{splitorText[2]}}</text>
<text class="gui-countdown-numbers gui-border"
:style="{
borderColor:borderColor,
width:size*lineHeight+'rpx', marginRight:spacing,
height:size*lineHeight+'rpx', lineHeight:size*lineHeight+'rpx', fontSize:size+'rpx',
color:fontColor, backgroundColor:bgColor}">{{s}}</text>
<text class="gui-countdown-splitor"
:style="{color:splitorColor, fontSize:size+'rpx'}">{{splitorText[3]}}</text>
</view>
</template>
<script>
export default {
name : "gui-count-down",
props : {
bgColor : { type: String, default : "#FFFFFF" },
borderColor : { type:String, default : "#FFFFFF"},
fontColor : { type: String, default : "#2B2E3D" },
size : { type: Number, default : 26},
lineHeight : { type: Number, default : 1.8},
splitorColor : { type: String, default : "rgba(69, 90, 100, 0.6)" },
timer : { type:String, default : "" },
splitorText : { type : Array,
default : function () {
return ['天', '时', '分', '秒']
}
},
show : {type:Boolean, default:true},
zeroShow : {type:Boolean, default:true},
spacing : {type:String, default:'0rpx'}
},
data() {
return {
d : 0,
h : "",
i : "",
s : "",
leftTime : 0,
outTimer : null,
timerIn : '',
leftTimeNum : 0
}
},
created : function(){
this.timerIn = this.timer;
this.runbase();
},
watch : {
timer : function(){
this.timerIn = this.timer;
this.runbase();
}
},
methods : {
runbase : function(){
var reg = /^([0-9]{4})-([0-9]{2})-([0-9]{2}) ([0-9]{2}):([0-9]{2}):([0-9]{2})$/;
var res = this.timerIn.match(reg);
if (res == null){ return false;}
var year = parseInt(res[1]);
if (year < 1000) { return false; }
var month = parseInt(res[2]);
var day = parseInt(res[3]);
var h = parseInt(res[4]);
if (h < 0 || h > 24) { return false; }
var i = parseInt(res[5]);
if (i < 0 || i > 60) { return false; }
var s = parseInt(res[6]);
if (s < 0 || s > 60) { return false; }
var leftTime = new Date(year, month - 1, day, h, i, s);
this.leftTime = leftTime;
clearTimeout(this.outTimer);
this.countDown();
},
countDown: function (){
var leftTime = this.leftTime - new Date();
this.leftTimeNum = leftTime;
if (leftTime > 0) {
var day = parseInt(leftTime / (1000 * 60 * 60 * 24));
var hours = parseInt((leftTime % (1000 * 60 * 60 * 24)) / (1000 * 60 * 60));
var minutes = parseInt((leftTime % (1000 * 60 * 60)) / (1000 * 60));
var seconds = parseInt((leftTime % (1000 * 60)) / 1000);
if (hours < 10) { hours = '0' + hours;}
if (minutes < 10) { minutes = '0' + minutes; }
if (seconds < 10) { seconds = '0' + seconds; }
this.h = hours;
this.i = minutes;
this.s = seconds;
this.d = day;
this.outTimer = setTimeout(()=>{this.countDown();}, 1000);
}else{
clearTimeout(this.outTimer);
this.h = '00';
this.i = '00';
this.s = '00';
this.d = 0;
this.$emit('endDo');
}
},
reSetTimer : function(timer){
clearTimeout(this.outTimer);
this.timerIn = timer;
this.runbase();
},
getTimeRemaining : function(){
if(this.leftTimeNum < 0){return 0;}
return parseInt(this.leftTimeNum / 1000);
}
}
}
</script>
<style scoped>
.gui-countdown-splitor{padding:0 5rpx;}
.gui-countdown-numbers{border-radius:8rpx; text-align:center;}
</style>