countDown2.vue 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. <template>
  2. <span>
  3. <slot v-bind:timeData="timeData">{{content}}</slot>
  4. </span>
  5. </template>
  6. <script>
  7. export default {
  8. name: "CountDown",
  9. data() {
  10. return {
  11. timer: null,
  12. date: null,
  13. timeData:{},
  14. day: null,
  15. hour: null,
  16. min: null,
  17. sec: null,
  18. content: this.endText //显示
  19. };
  20. },
  21. props: {
  22. // 倒计时时间 (分钟)
  23. time: {
  24. type: Number,
  25. default: ""
  26. },
  27. endText: {
  28. type: String,
  29. default: "00:00:00"
  30. }
  31. },
  32. mounted() {
  33. this.countdowm(this.time);
  34. },
  35. methods: {
  36. // 开始倒计时
  37. countdowm(timestamp) {
  38. let self = this;
  39. let endTime = timestamp < 1000000000000 ? timestamp * 1000 : timestamp;
  40. self.timer = setInterval(function() {
  41. let nowTime = new Date();
  42. let t = endTime - nowTime.getTime();
  43. // 判断剩余时间是否 >0
  44. if (t > 0) {
  45. self.day = Math.floor(t / (60 * 60 * 24 * 1000));
  46. self.hour = Math.floor((t / 3600000) % 24);
  47. self.min = Math.floor((t / 60000) % 60);
  48. self.sec = Math.floor((t / 1000) % 60);
  49. let day = self.day < 10 ? "0" + self.day : self.day;
  50. let hour = self.hour < 10 ? "0" + self.hour : self.hour;
  51. let min = self.min < 10 ? "0" + self.min : self.min;
  52. let sec = self.sec < 10 ? "0" + self.sec : self.sec;
  53. let format = `${day}:${hour}:${min}:${sec}`;
  54. self.content = format;
  55. self.$set(self.timeData,'day',day)
  56. self.$set(self.timeData,'hours',hour)
  57. self.$set(self.timeData,'minutes',min)
  58. self.$set(self.timeData,'seconds',sec)
  59. } else {
  60. // 倒计时结束
  61. self.$emit("finish", 0);
  62. clearInterval(self.timer);
  63. self.content = "00:00:00:00";
  64. }
  65. }, 1000);
  66. }
  67. }
  68. };
  69. </script>