en-number.vue 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  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. console.log('-------------------')
  31. this.startNumber()
  32. }
  33. },
  34. mounted() {
  35. this.startNumber()
  36. },
  37. methods: {
  38. startNumber(){
  39. if(this.endNum<=0){
  40. return
  41. }
  42. this.number=0
  43. let addNum=9
  44. let frameNum=1
  45. if(this.endNum<=500){
  46. addNum=1
  47. frameNum=15
  48. }else if(this.endNum<7000){
  49. addNum=3
  50. frameNum=11
  51. }else if(this.endNum<16000){
  52. addNum=6
  53. frameNum=8
  54. }
  55. let intervalId=setInterval(()=>{
  56. this.number+=addNum
  57. if(this.number>=this.endNum){
  58. this.number=this.endNum
  59. clearInterval(intervalId)
  60. }
  61. },frameNum)
  62. }
  63. },
  64. }
  65. </script>
  66. <style lang="scss">
  67. .number-box{
  68. display: inline;
  69. }
  70. </style>