index.vue 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139
  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">
  43. <span>separator:</span><el-input v-model="separator" />
  44. </div>
  45. </el-col>
  46. <el-col :span="8">
  47. <div class="action__item">
  48. <span>prefix:</span><el-input v-model="prefix" />
  49. </div>
  50. </el-col>
  51. <el-col :span="8">
  52. <div class="action__item">
  53. <span>suffix:</span><el-input v-model="suffix" />
  54. </div>
  55. </el-col>
  56. <el-col :span="24">
  57. <div style="text-align: center;margin-top: 20px;">
  58. <el-button type="primary" @click="start">start</el-button>
  59. <el-button style="margin-left: 10px;" @click="pauseResume">pause/resume</el-button>
  60. </div>
  61. </el-col>
  62. </el-row>
  63. </div>
  64. </div>
  65. </template>
  66. <script lang="ts">
  67. import { defineComponent, ref, unref } from 'vue'
  68. import CountTo from '_c/CountTo/index.vue'
  69. export default defineComponent({
  70. // name: 'CountToDemo',
  71. components: {
  72. CountTo
  73. },
  74. setup() {
  75. const countRef = ref<HTMLElement | null>(null)
  76. const startVal = ref<number>(0)
  77. const endVal = ref<number>(1314512)
  78. const duration = ref<number>(3000)
  79. const decimals = ref<number>(0)
  80. const separator = ref<string>(',')
  81. const prefix = ref<string>('¥ ')
  82. const suffix = ref<string>(' rmb')
  83. const autoplay = ref<boolean>(false)
  84. function start(): void {
  85. (unref(countRef) as any).start()
  86. }
  87. function pauseResume(): void {
  88. (unref(countRef) as any).pauseResume()
  89. }
  90. return {
  91. countRef,
  92. startVal,
  93. endVal,
  94. duration,
  95. decimals,
  96. separator,
  97. prefix,
  98. suffix,
  99. autoplay,
  100. start,
  101. pauseResume
  102. }
  103. }
  104. })
  105. </script>
  106. <style lang="less" scoped>
  107. .count-to {
  108. text-align: center;
  109. margin-top: 40px;
  110. &__item {
  111. font-size: 80px;
  112. color: #f6416c;
  113. font-weight: bold;
  114. }
  115. }
  116. .action {
  117. margin-top: 20px;
  118. &__item {
  119. padding: 0 15px;
  120. display: flex;
  121. align-items: center;
  122. margin-bottom: 10px;
  123. &>span {
  124. display: inline-block;
  125. width: 120px;
  126. text-align: center;
  127. }
  128. @{deep}(.el-input-number) {
  129. width: 100%;
  130. }
  131. }
  132. }
  133. </style>