商城倒计时组件封装,支持小程序、h5、ios和安卓app

欢迎加我技术交流QQ群 :811956471

前言:最近开发商城需要一个倒计时组件,就自己封装了一个,方便自己以后使用。

事件以及属性介绍:

事件: @time-end:倒计时时间结束触发
属性:endTime:剩余的时间:格式为时间戳或 yyyy-mm-dd hh:mm:ss
属性:tempDownBg:// 倒计时容器背景颜色:值有:temp_down_blackBg(默认)、temp_down_redBg
属性:isShowDay:布尔值,//是否显示天:默认false不显示天,把天全部转换成小时,即:时:分:秒
属性:endTimeType:布尔值,//剩余的时间格式:默认为时间戳(单位秒)、false为:yyyy-mm-dd hh:mm:ss
组件模板源码:

<template>
  <view class="page">
    <!-- 基础用法: -->
   <!-- <view class="time">{{timeArry.h:timeArry.m:timeArry.s}}</view> -->
    <!-- 带入样式: -->
    <view class="temp_down_time_bx">
      <view :class="['temp_down_time_item',tempDownBg]" v-if="isShowDay">{{timeArry.d}}</view>
      <view class="temp_down_time_dot"  v-if="isShowDay">天</view>
      <view :class="['temp_down_time_item',tempDownBg]">{{timeArry.h}}</view>
      <view class="temp_down_time_dot ">:</view>
      <view :class="['temp_down_time_item',tempDownBg]">{{timeArry.m}}</view>
      <view class="temp_down_time_dot">:</view>
      <view :class="['temp_down_time_item',tempDownBg]">{{timeArry.s}}</view>
    </view>
  </view>
</template>

<script>
  export default {
    data() {
      return {
        timeArry:{},
        flag: false
      }
    },
    props: {
      // 剩余的时间:格式为时间戳或 yyyy-mm-dd hh:mm:ss,如果是时间戳会转换成yyyy-mm-dd hh:mm:ss
      endTime: {
        type: String
      },
      // 剩余的时间格式:默认为时间戳(单位秒)、false为:yyyy-mm-dd hh:mm:ss
      endTimeType: {
       type: Boolean,
       default:true
      },
      // 倒计时容器背景颜色
      tempDownBg:{
         type: String,
          default:"temp_down_blackBg"
      },
      //是否显示天:默认false不显示天,把天全部转换成小时,即:时:分:秒
      isShowDay:{
         type: Boolean,
         default:false
      },
      
    },
    mounted() {
      let time = setInterval(() => {
        if (this.flag == true) {
          clearInterval(time)
        }
        this.timeDown()
      }, 1000)
    },

    methods: {
      timeDown() {
        //如果传入的是一个时间戳,调用this.formatDate(this.endTime)次方法转成:2019-09-22 20:38:14格式
        let t=this.endTime;
        if(this.endTimeType){
             t = this.formatDate(this.endTime);
        }
        // console.log("方法转成:",t)
        const endTime = new Date(t);
        const nowTime = new Date();
        let h="";
        let leftTime = parseInt((endTime.getTime() - nowTime.getTime()) / 1000)
        console.log("剩余时间leftTime_单位秒:",leftTime)
        let d = parseInt(leftTime / (24 * 60 * 60))
            h = this.formate(parseInt(leftTime / (60 * 60) % 24))
        let h_day = this.formate(parseInt(leftTime / (60 * 60)))
        let m = this.formate(parseInt(leftTime / 60 % 60))
        let s = this.formate(parseInt(leftTime % 60))
        
        if(!this.isShowDay){
          h=h_day
        }
        if (leftTime < 0) {
          this.flag = true
          this.$emit('time-end')
         this.timeArry={
           d:0,
           h:0,
           m:0,
           s:0
         }
        } else {
          //如果不显示天会把天转换成总共小时数量,时间位置取 h_day变量
          // this.time = `${h_day}:${m}:${s}`
          // this.time_day = `${d}天${h}小时${m}分${s}秒`
          this.timeArry={
            d:d,
            h:h,
            m:m,
            s:s
          }
        }
      },
      formate(time) {
        if (time >= 10) {
          return time
        } else {
          return `0${time}`
        }
      },
      //如果传入的是一个时间戳,调用次方法转成:2019-09-22 20:38:14格式
      formatDate: function(value) {
        if (value != null && value != '') {
          value = value * 1;
          let date = new Date(value * 1000);
          let y = date.getFullYear();
          let MM = date.getMonth() + 1;
          MM = MM < 10 ? '0' + MM : MM;
          let d = date.getDate();
          d = d < 10 ? '0' + d : d;
          let h = date.getHours();
          h = h < 10 ? '0' + h : h;
          let m = date.getMinutes();
          m = m < 10 ? '0' + m : m;
          let s = date.getSeconds();
          s = s < 10 ? '0' + s : s;
          return y + '/' + MM + '/' + d + ' ' + h + ':' + m + ':' + s;
          // return y + '-' + MM + '-' + d;
        }
      },
    }
  }
</script>
<style scoped>
  .temp_down_time_bx {
    display: flex;
    align-items: center;
    font-family: PingFangSC-Medium, PingFangSC;
    text-align: center;
  }

  .temp_down_time_item {
    width: 26rpx;
    height: 23rpx;
    border-radius: 4rpx;
    font-size: 20rpx;
    font-weight: 500;
    color: rgba(255, 255, 255, 1);
    line-height: 23rpx;
  }
  /* 黑色背景 */
  .temp_down_blackBg{
     background: #666666;
  }
  
  /* 黄红渐变色背景 */
  .temp_down_redBg{
    background:linear-gradient(135deg,rgba(242,131,9,1) 0%,rgba(230,36,15,1) 100%);
  }

  .temp_down_time_dot {
      font-size: 20rpx;
  }
</style>

在页面中使用;

<template>
  <view class="page">
  <my-down-time @time-end="endTimeFn" :endTime="end_time" tempDownBg="temp_down_redBg" isShowDay="true"></my-down-time>
   <my-down-time @time-end="endTimeFn" :endTime="end_time" ></my-down-time>
  </view>
</template>

<script>
  import myDownTime from  '@/components/myDownTime.vue'
  export default {
    components: {
      myDownTime
    },
    data() {
      return {
        pageTitle:"倒计时组件",
        end_time:"1569740940"
      }
    },
    onLoad() {
      
    },
    onShow() {
      
    },
    onReady() {
     
    },
    methods: {
      //时间结束事件
      endTimeFn(){
        console.log("时间结束事件触发了")
      }
    }
  }
</script>

<style scoped>
  
</style>

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 217,826评论 6 506
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,968评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,234评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,562评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,611评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,482评论 1 302
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,271评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,166评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,608评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,814评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,926评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,644评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,249评论 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,866评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,991评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,063评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,871评论 2 354

推荐阅读更多精彩内容