美文网首页派大星爱吃小鱼干
vue中封装倒计时组件

vue中封装倒计时组件

作者: 程序猿阿峰 | 来源:发表于2019-04-26 14:04 被阅读1次

你或许遇到过,在项目里总会有倒计时,而且是多处用到,这样,你就不得不考虑下复用了


效果图

代码如下

downTime.vue 这只是个组件名称,或许你不喜欢。

<template>
  <!-- 倒计时组件 -->
  <div class="downTime-wrapper">
    <!-- 这里是显示还未结束时的内容,这里只是我这得布局,你可以随意。 -->
    <div class="time" v-show="!isShow">
      <span class="hour">{{myDay}}</span> : 
      <span class="hour">{{myHours}}</span> :
      <span class="minute">{{myMinutes}}</span> :
      <span class="second">{{mySeconds}}</span>
    </div>
    <!-- 这里是显示结束后的内容 -->
    <span class="second" v-show="isShow">{{clocker}}</span>
  </div>
</template>

<script>
export default {
  name: 'downTime',

  props: { // 接收父组件传递过来的参数,这里传了  结束时间 - 开始时间 - 结束后显示的内容
    endTime: {
      type: Number
    },
    startTime: {
      type: Number
    },
    endMsg: {
      type: String
    }
  },

  data () {
    return {
      isShow: false, // 控制显示结束或还未结束显示的内容
      clocker: '', // 结束后显示的内容
      timeObj: null, // 时间对象,下方会用到
      myDay: 0, // 我定义来接收计算出来的 天 的
      myHours: 0, // 我定义来接收计算出来的 小时 的
      myMinutes: 0, // 我定义来接收计算出来的 分钟 的
      mySeconds: 0// 我定义来接收计算出来的 秒钟 的
    }
  },

  mounted () {
    // 计算时间差
    let timeLag = (this.endTime - this.startTime) / 1000
    // 判断当前是否时分秒的值是否大于10
    let add = num => {
      return num < 10 ? '0' + num : num
    }
    // 时间倒计时运算的方法
    let timeFunction = () => {
      let time = timeLag--
      this.timeObj = { // 时间对象
        seconds: Math.floor(time % 60),
        minutes: Math.floor(time / 60) % 60,
        hours: Math.floor(time / 60 / 60) % 24,
        days: Math.floor(time / 60 / 60 / 24)
      }
      // 计算出时分秒
      this.myDay = `${add(this.timeObj.days)}`
      this.myHours = `${add(this.timeObj.hours)}`
      this.myMinutes = `${add(this.timeObj.minutes)}`
      this.mySeconds = `${add(this.timeObj.seconds)}`
      // 当时间差小于等于0时,停止倒计时
      if (time <= 0) {
        this.isShow = true
        this.clocker = this.endMsg || '该团已经结束'
        clearInterval(go)
      }
    }
    // 开始执行倒计时
    timeFunction()
    // 每一秒执行一次
    let go = setInterval(() => {
      timeFunction()
    }, 1000)
  }
}
</script>

<style lang="scss" scoped>
.downTime-wrapper{
  font-size: 0.12rem;
  font-weight: bold;
  // .hour{}
  // .minute{}
  .second{
    color: rgb(235, 62, 61);
  }
}
</style>

父组件

<template>
  <!-- 这里传的是时间戳 -->
  <downTime
    :endTime="endTime"
    :startTime="new Date().getTime()"
    :endMsg="倒计时结束"
   />
</template>

然后就这样了 ↓


效果图,本来想动图的,想想还是算了,因为大家都懂的

不过这里有个问题,就是当前调用这个倒计时的组件被销毁后,倒计时还在后台继续执行,还没有解决!


期待你的答案

好了。下次我忘了再打开看看。

相关文章

  • vue3 中对 dialog 封装

    vue3 中对 dialog 封装 子组件 父组件

  • Vue中的组件通信

    一、Vue中的组件 组件(Component)是Vue.js最强大的功能之一,组件可以扩展HTML元素,封装可重用...

  • vue周期函数

    1.vue中的组件 -vue中所有页面由组件组成-vue可以将公共的部分封装成组件在其他地方使用-App.vue是...

  • 使用vue-pdf在Vue中进行pdf的预览下载

    1、使用npm 下载vue-pdf 2、封装pdf组件 3、在组件中具体使用封装的pdf组件 4、打包的时候会报错...

  • 通过vue封装弹窗组件/vue封装组件的方式选择依据

    通过vue封装弹窗组件 大部分vue对效果的封装,有3个方式: 普通公共组件封装: 涉及东西,父子组件之间的传值和...

  • Vue之间的通信方式

    Vue组件间通信方式 快速原型开发 可以快速识别.vue文件封装组件插件等功能 一.Props传递数据 在父组件中...

  • VUE 封装拖拽组件

    vue 拖拽组件封装,组件代码如下 使用方式:

  • Vue 全局组件封装

    在Vue项目的开发中,我们需要对一些常用的组件进行封装复用,这时我们需要用到Vue提供的全局组件API来封装我们的...

  • [小程序][医美]

    组件: 小程序组件开发模板 navbar 顶部导航组件封装原则 倒计时

  • 动态form组件

    通过数据渲染出form组件 封装组件 from-group.vue api中的 sendFormData方法 视图...

网友评论

    本文标题:vue中封装倒计时组件

    本文链接:https://www.haomeiwen.com/subject/dvmfnqtx.html