当前位置: 首页 > article >正文

倒计时demo

<!-- 倒计时 -->
<template>
  <view class="flex a-c j-c event-down" :style="{minWidth:`${minWidth}`,textAlign:`${textAlign}`}">
		<view class="down-item br-8 flex a-c j-c bold col-fff f-24 lin-24" v-if="Number(day) > 0">
			{{day}}
		</view>
		<view v-if="Number(day) > 0" class="col-fff f-24 lin-24 bold flex a-c j-c down-icon">:</view>
		<view class="down-item br-8 flex a-c j-c bold col-fff f-24 lin-24">
			{{hou}}
		</view>
		<view class="col-fff f-24 lin-24 bold flex a-c j-c down-icon">:</view>
		<view class="down-item br-8 flex a-c j-c bold col-fff f-24 lin-24">
			{{min}}
		</view>
		<view class="col-fff f-24 lin-24 bold flex a-c j-c down-icon">:</view>
		<view class="down-item br-8 flex a-c j-c bold col-fff f-24 lin-24">
			{{sec}}
		</view>
  </view>
</template>

<script>
export default {
  name: "count-down",
  props: {
		//开始时间
    currentTime: {
      type: [String, Number],
      default: 0
    },
		//结束时间
    endTime: {
      type: [String, Number],
      default: 0
    },
		minWidth:{
			type:String,
			default:'100rpx'
		},
		textAlign:{
			type:String,
			default:'left'
		}
  },
  data() {
    return {
      day: '00',
      hou: '00',
      min: '00',
      sec: '00',
    }
  },
  created() {
    this.countDown(this.currentTime, this.endTime)
  },
	beforeDestroy(){
		clearInterval(this.interval);
	},
  methods: {
    timeFormat(param) {
      return param < 10 ? '0' + param : param;
    },
    countDown(newTime, endTime) {
      clearInterval(this.interval);
      this.interval = null;
      this.interval = setInterval(() => {
        // 对结束时间进行处理渲染到页面
        let obj = null;
        // 如果活动未结束,对时间进行处理
        newTime = newTime + 1000;
        if (endTime - newTime > 0) {
          let time = (endTime - newTime) / 1000;
          // 获取天、时、分、秒
          let day = parseInt(time / (60 * 60 * 24));
          let hou = parseInt(time % (60 * 60 * 24) / 3600);
          let min = parseInt(time % (60 * 60 * 24) % 3600 / 60);
          let sec = parseInt(time % (60 * 60 * 24) % 3600 % 60);
          obj = {
            day: this.timeFormat(day),
            hou: this.timeFormat(hou),
            min: this.timeFormat(min),
            sec: this.timeFormat(sec)
          };
        } else { // 活动已结束,全部设置为'00'
          obj = {
            day: '00',
            hou: '00',
            min: '00',
            sec: '00'
          };
          clearInterval(this.interval);
        }
        this.day = obj.day;
        this.hou = obj.hou;
        this.min = obj.min;
        this.sec = obj.sec;
      }, 1000);
    },
  }
}
</script>

<style scoped lang="scss">
.date {
  white-space: nowrap;
}
.event-down{
	.down-item{
		width: 40rpx;
		height: 40rpx;
		background: #141414;
		box-sizing: border-box;
	}
	.down-icon{
		width: 28rpx;
		height: 40rpx;
	}
}
</style>

在这里插入图片描述


http://www.kler.cn/a/372163.html

相关文章:

  • 头歌网络安全爬虫
  • 【Nas】X-DOC:Mac mini Docker部署小雅Alist
  • “震惊!消费满额即领高额返现,循环购物模式揭秘“
  • SD-WAN分布式组网:构建高效、灵活的企业网络架构
  • TIFS-2024 FIRe2:细粒度表示和重组在换衣行人重识别中的应用
  • 深入理解所有权与借用——借用与生命周期管理
  • EXPLAIN 针对性优化 SQL 查询
  • 【TS】TypeScript 类型定义之联合类型(union types)和交叉类型(intersection types)
  • Git_码云
  • RabbitMQ如何防止消息丢失及重复消费
  • C++中封装红黑树模拟实现map和set
  • echarts横向左右对比柱状图,两种展示方式(对向、反向)
  • 【大数据学习 | kafka】kafuka的基础架构
  • 使用Git进行版本控制的最佳实践
  • 1G-5G的技术转变和应用
  • 如何结合社交媒体进行ASO推广?
  • 技术干货|如何巧妙利用数字孪生技术助力口腔保健分析
  • 瑞芯微RK3566/RK3568 Android11下该如何默认屏蔽导航栏/状态栏?看这篇文章就懂了
  • 2023年信息安全工程师摸底测试卷
  • MongoDB 6.0 主从复制配置
  • 深度学习:正则化(Regularization)详细解释
  • 南山区怡海地铁站附近的免费停车点探寻
  • 蓝桥杯 python day01 第一题
  • Git获取本地仓库和常用指令
  • MongoDB 8.0 全新登场:究竟如何?
  • Python入门——iter迭代器—__iter__()方法__next__()方法