en-number.vue 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. <template>
  2. <view class="number-box" :class="[textWeight,textSize,textColor]">
  3. {{number}}
  4. </view>
  5. </template>
  6. <script>
  7. export default {
  8. name:'en-number',
  9. props:{
  10. 'endNum':{
  11. default:0
  12. },
  13. textColor:{
  14. default: 'color-02154E'
  15. },
  16. textSize:{
  17. default: 'size-30'
  18. },
  19. textWeight:{
  20. default: 'sys-weight-400'
  21. }
  22. },
  23. data() {
  24. return {
  25. number:0
  26. };
  27. },
  28. watch:{
  29. 'endNum':function () {
  30. this.startNumber()
  31. }
  32. },
  33. mounted() {
  34. this.startNumber()
  35. },
  36. methods: {
  37. startNumber(){
  38. if(this.endNum<=0){
  39. return
  40. }
  41. this.number=0
  42. let addNum=9
  43. let frameNum=1
  44. if(this.endNum<=500){
  45. addNum=1
  46. frameNum=15
  47. }else if(this.endNum<7000){
  48. addNum=3
  49. frameNum=11
  50. }else if(this.endNum<16000){
  51. addNum=6
  52. frameNum=8
  53. }
  54. let intervalId=setInterval(()=>{
  55. this.number+=addNum
  56. if(this.number>=this.endNum){
  57. this.number=this.endNum
  58. clearInterval(intervalId)
  59. }
  60. },frameNum)
  61. }
  62. },
  63. }
  64. </script>
  65. <style lang="scss">
  66. .number-box{
  67. display: inline;
  68. }
  69. </style>