zoukankan      html  css  js  c++  java
  • 分享一个数字跳动的组件

    import { createElement, useEffect, useState } from 'rax';
    import View from 'rax-view';
    import classnames from 'classnames';
    import { isValidNumber } from '@/common/util';
    
    interface NumberAnimationPropsType {
      from?: number;
      value: number;
      speed?: number;
      interval: number;
      className?: string;
      style?: CSSProperties;
    }
    
    export default function NumberAnimation(props: NumberAnimationPropsType) {
      const {
        style,
        className,
        value,
        triggerAnimation = true,
        from = 0,
        speed = 1000,
        interval = 100,
        format = v => v,
      } = props;
    
      const [ numberShow, setNumber ] = useState(from);
    
       function isValidNumber(num) {
          return isNaN(num) ? false : num !== null && num !== 
    undefined && num !== "";
       }
    
      useEffect(() => {
        if (!triggerAnimation) {
          return;
        }
    
        if (!isValidNumber(value)) {
          setNumber(value);
          return;
        }
    
        let loops = Math.ceil(speed / interval),
            increment = parseInt((value - from) / loops),
            loopCount = 0,
            number = from,
            timer = setInterval(updateTimer, interval);
    
        function updateTimer() {
          loopCount++;
    
          if (loopCount >= loops){
            number = value;
            clearInterval(timer);
          } else {
            number += increment;
          }
    
          setNumber(number);
        };
    
        return () => {
          if (timer) {
            clearInterval(timer);
          }
        };
      }, [value, triggerAnimation]);
    
      return (
        <View className={className} style={style}>{format(numberShow)}</View>
      );
    }
  • 相关阅读:
    对this的浅解
    Java设计模式---工厂模式学习笔记
    MyBatis入门
    Java设计模式---单例模式学习笔记
    java设计模式--七大原则
    Servlet request常用方法
    maven中导入jdbc的坑
    Servlet生命周期
    JQuery选择器
    Test
  • 原文地址:https://www.cnblogs.com/yujiawen/p/15697101.html
Copyright © 2011-2022 走看看