index.vue 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116
  1. <template>
  2. <div>
  3. <el-alert
  4. effect="dark"
  5. :closable="false"
  6. title="基于 vue-count-to 进行改造,支持所有 vue-count-to 参数。"
  7. type="info"
  8. style="margin-bottom: 20px"
  9. />
  10. <div class="count-to">
  11. <count-to
  12. ref="countRef"
  13. :start-val="startVal"
  14. :end-val="endVal"
  15. :duration="duration"
  16. :decimals="decimals"
  17. :separator="separator"
  18. :prefix="prefix"
  19. :suffix="suffix"
  20. :autoplay="autoplay"
  21. class="count-to__item"
  22. />
  23. </div>
  24. <div class="action">
  25. <el-row :gutter="20">
  26. <el-col :span="8">
  27. <div class="action__item">
  28. <span>startVal:</span><el-input-number v-model="startVal" :min="0" />
  29. </div>
  30. </el-col>
  31. <el-col :span="8">
  32. <div class="action__item">
  33. <span>endVal:</span><el-input-number v-model="endVal" :min="1" />
  34. </div>
  35. </el-col>
  36. <el-col :span="8">
  37. <div class="action__item">
  38. <span>duration:</span><el-input-number v-model="duration" :min="1000" />
  39. </div>
  40. </el-col>
  41. <el-col :span="8">
  42. <div class="action__item"> <span>separator:</span><el-input v-model="separator" /> </div>
  43. </el-col>
  44. <el-col :span="8">
  45. <div class="action__item"> <span>prefix:</span><el-input v-model="prefix" /> </div>
  46. </el-col>
  47. <el-col :span="8">
  48. <div class="action__item"> <span>suffix:</span><el-input v-model="suffix" /> </div>
  49. </el-col>
  50. <el-col :span="24">
  51. <div style="margin-top: 20px; text-align: center">
  52. <el-button type="primary" @click="start">start</el-button>
  53. <el-button style="margin-left: 10px" @click="pauseResume">pause/resume</el-button>
  54. </div>
  55. </el-col>
  56. </el-row>
  57. </div>
  58. </div>
  59. </template>
  60. <script setup lang="ts" name="CountToDemo">
  61. import { ref, unref } from 'vue'
  62. import CountTo from '_c/CountTo/index.vue'
  63. const countRef = ref<HTMLElement | null>(null)
  64. const startVal = ref<number>(0)
  65. const endVal = ref<number>(1314512)
  66. const duration = ref<number>(3000)
  67. const decimals = ref<number>(0)
  68. const separator = ref<string>(',')
  69. const prefix = ref<string>('¥ ')
  70. const suffix = ref<string>(' rmb')
  71. const autoplay = ref<boolean>(false)
  72. function start(): void {
  73. ;(unref(countRef) as any).start()
  74. }
  75. function pauseResume(): void {
  76. ;(unref(countRef) as any).pauseResume()
  77. }
  78. </script>
  79. <style lang="less" scoped>
  80. .count-to {
  81. margin-top: 40px;
  82. text-align: center;
  83. &__item {
  84. font-size: 80px;
  85. font-weight: bold;
  86. color: #f6416c;
  87. }
  88. }
  89. .action {
  90. margin-top: 20px;
  91. &__item {
  92. display: flex;
  93. padding: 0 15px;
  94. margin-bottom: 10px;
  95. align-items: center;
  96. & > span {
  97. display: inline-block;
  98. width: 120px;
  99. text-align: center;
  100. }
  101. :deep(.el-input-number) {
  102. width: 100%;
  103. }
  104. }
  105. }
  106. </style>