uni-app(vue) 通用倒计时组件

青旅半醒 2022-11-27 07:09 579阅读 0赞
  1. <template>
  2. <view>
  3. <view class="count">
  4. <view class="list">{ { hour}}:</view>
  5. <view class="list">{ { minute}}:</view>
  6. <view class="list">{ { second}}</view>
  7. </view>
  8. </view>
  9. </template>
  10. <script>
  11. export default {
  12. name: "countdown",
  13. props: {
  14. start: {
  15. type: Number,
  16. default: 0
  17. },
  18. finish: {
  19. type: Number,
  20. default: 0
  21. }
  22. },
  23. data() {
  24. return {
  25. hour: '',
  26. minute:'',
  27. second:''
  28. }
  29. },
  30. created(){
  31. var a =this;
  32. var start = a.start.toString().substring(0,10);
  33. var finish = a.finish.toString().substring(0,10);
  34. var timer = parseInt(finish)-parseInt(start)
  35. var hours = parseInt((timer % (1000 * 60 * 60 * 24)) / (1000 * 60 * 60));
  36. var minutes = parseInt((timer % (1000 * 60 * 60)) / (1000 * 60));
  37. var seconds = parseInt((timer % (1000 * 60)) / 1000);
  38. a.hour = (hours < 10 ? ('0' + hours) : hours);
  39. a.minute = (minutes < 10 ? ('0' + minutes) : minutes);
  40. a.second = (seconds < 10 ? ('0' + seconds) : seconds);
  41. var interval = setInterval(() => {
  42. a.second = (Array(2).join(0) + parseInt(--a.second)).slice(-2)
  43. if (a.second == 0) {
  44. if (a.minute != 0) {
  45. a.minute = (Array(2).join(0) + parseInt(--a.minute)).slice(-2)
  46. a.second = 59
  47. } else {
  48. if (a.hour != 0) {
  49. a.hour = (Array(2).join(0) + parseInt(--a.hour)).slice(-2)
  50. a.minute = 59
  51. a.second = 59
  52. } else {
  53. clearInterval(interval)
  54. a.finality()
  55. }
  56. }
  57. }
  58. }, 1000)
  59. },
  60. methods: {
  61. finality(){
  62. this.$emit('finish');
  63. },
  64. }
  65. }
  66. </script>
  67. <style lang="scss">
  68. .count {
  69. width: 100%;
  70. height: 100%;
  71. display: flex;
  72. border-radius: 40rpx;
  73. background-color: rgba(0,0,0,.2);
  74. flex-wrap: nowrap;
  75. padding: 0rpx 12rpx;
  76. .list {
  77. flex: 1;
  78. height: 80%;
  79. font-size: 24rpx;
  80. color: #fff;
  81. letter-spacing: 2rpx;
  82. font-weight: 600;
  83. }
  84. }
  85. </style>

用法

组件引入后,在组件中传入 start=‘开始的时间戳’ finish=‘结束的时间戳’ 即可

发表评论

表情:
评论列表 (有 0 条评论,579人围观)

还没有评论,来说两句吧...

相关阅读

    相关 计时

    验证输入手机号 验证码倒计时 ![这里写图片描述][SouthEast]![这里写图片描述][SouthEast 1] \如上图所示 要实现验证码的倒计时的效果