zoukankan      html  css  js  c++  java
  • css3 实现数字滚动的动画组件 (react版)

    在写前端页面的时候,经常会遇到需要写数字滚动动画的需求,那我们今天就来实现一个。先看一下效果 数字滚动动画

    懒得写html版了,有需要的就给我留言吧,就直接贴一个react组件版,直接拿去用。

    react 组件JSX:

    import React, { Component } from "react"
    import "./index.scss"
    export default class NumbersCount extends Component {
      constructor(props) {
        super(props)
        this.state = {
          visible: true
        }
      }
      render() {
        const { showValue } = this.props
        const numberList = (showValue + "").split("")
        return <div className="numbers-container" style={this.props.numberContainerStyle}>
          {
            numberList.map((number, index) => {
              let scrollClass = ""
              if (number === "0") {
                scrollClass = "numbers-scroll0" + Math.ceil(Math.random * 5)
              } else {
                scrollClass = "numbers-scroll" + number
              }
    
              return <div className="numbers-box" key={index}>
                { showValue > 0 ?
                  <span className={scrollClass} style={this.props.numberStyle}>
                    <label>0</label>
                    <label>1</label>
                    <label>2</label>
                    <label>3</label>
                    <label>4</label>
                    <label>5</label>
                    <label>6</label>
                    <label>7</label>
                    <label>8</label>
                    <label>9</label>
                    <label>0</label>
                  </span>
                  :
                  <span>
                    <label>0</label>
                  </span>
                }
              </div>
            })
          }
        </div>
      }
    }

    css3 动画样式:

    .numbers-container {
      width: 100%;
      height: 50px;
      line-height: 50px;
      margin-top: 6px;
      display: flex;
      justify-content: center;
      $marginTop: 50px;
      @keyframes scrollNumber0
      {
        0% { margin-top: 0px; }
        100% { margin-top: -1100;}
      }
    
      @-moz-keyframes scrollNumber0 /* Firefox */
      {
        0% { margin-top: 0px; }
        100% { margin-top: -1100;}
      }
    
      @-webkit-keyframes scrollNumber0 /* Safari 和 Chrome */
      {
        0% { margin-top: 0px; }
        100% { margin-top: -1100;}
      }
    
      @-o-keyframes scrollNumber0 /* Opera */
      {
        0% { margin-top: 0px; }
        100% { margin-top: -1100;}
      }
      //////////////////////////////
      @keyframes scrollNumber1
      {
        0% { margin-top: 0px; }
        100% { margin-top: -1 * $marginTop;}
      }
    
      @-moz-keyframes scrollNumber1 /* Firefox */
      {
        0% { margin-top: 0px; }
        100% { margin-top: -1 * $marginTop;}
      }
    
      @-webkit-keyframes scrollNumber1 /* Safari 和 Chrome */
      {
        0% { margin-top: 0px; }
        100% { margin-top: -1 * $marginTop;}
      }
    
      @-o-keyframes scrollNumber1 /* Opera */
      {
        0% { margin-top: 0px; }
        100% { margin-top: -2 * $marginTop;}
      }
      //////////////////////////////
      @keyframes scrollNumber2
      {
        0% { margin-top: 0px; }
        100% { margin-top: -2 * $marginTop;}
      }
    
      @-moz-keyframes scrollNumber2 /* Firefox */
      {
        0% { margin-top: 0px; }
        100% { margin-top: -2 * $marginTop;}
      }
    
      @-webkit-keyframes scrollNumber2 /* Safari 和 Chrome */
      {
        0% { margin-top: 0px; }
        100% { margin-top: -2 * $marginTop;}
      }
    
      @-o-keyframes scrollNumber2 /* Opera */
      {
        0% { margin-top: 0px; }
        100% { margin-top: -2 * $marginTop;}
      }
      ////////////////////////////
      @keyframes scrollNumber3
      {
        0% { margin-top: 0px; }
        100% { margin-top: -3 * $marginTop;}
      }
    
      @-moz-keyframes scrollNumber3 /* Firefox */
      {
        0% { margin-top: 0px; }
        100% { margin-top: -3 * $marginTop;}
      }
    
      @-webkit-keyframes scrollNumber3 /* Safari 和 Chrome */
      {
        0% { margin-top: 0px; }
        100% { margin-top: -3 * $marginTop;}
      }
    
      @-o-keyframes scrollNumber3 /* Opera */
      {
        0% { margin-top: 0px; }
        100% { margin-top: -3 * $marginTop;}
      }
      ////////////////////////////
      @keyframes scrollNumber4
      {
        0% { margin-top: 0px; }
        100% { margin-top: -4 * $marginTop;}
      }
    
      @-moz-keyframes scrollNumber4 /* Firefox */
      {
        0% { margin-top: 0px; }
        100% { margin-top: -4 * $marginTop;}
      }
    
      @-webkit-keyframes scrollNumber4 /* Safari 和 Chrome */
      {
        0% { margin-top: 0px; }
        100% { margin-top: -4 * $marginTop;}
      }
    
      @-o-keyframes scrollNumber4 /* Opera */
      {
        0% { margin-top: 0px; }
        100% { margin-top: -4 * $marginTop;}
      }
      /////////////////////////////
      @keyframes scrollNumber5
      {
        0% { margin-top: 0px; }
        100% { margin-top: -5 * $marginTop;}
      }
    
      @-moz-keyframes scrollNumber5 /* Firefox */
      {
        0% { margin-top: 0px; }
        100% { margin-top: -5 * $marginTop;}
      }
    
      @-webkit-keyframes scrollNumber5 /* Safari 和 Chrome */
      {
        0% { margin-top: 0px; }
        100% { margin-top: -5 * $marginTop;}
      }
    
      @-o-keyframes scrollNumber5 /* Opera */
      {
        0% { margin-top: 0px; }
        100% { margin-top: -5 * $marginTop;}
      }
      /////////////////////////////
      @keyframes scrollNumber6
      {
        0% { margin-top: 0px; }
        100% { margin-top: -6 * $marginTop;}
      }
    
      @-moz-keyframes scrollNumber6 /* Firefox */
      {
        0% { margin-top: 0px; }
        100% { margin-top: -6 * $marginTop;}
      }
    
      @-webkit-keyframes scrollNumber6 /* Safari 和 Chrome */
      {
        0% { margin-top: 0px; }
        100% { margin-top: -6 * $marginTop;}
      }
    
      @-o-keyframes scrollNumber6 /* Opera */
      {
        0% { margin-top: 0px; }
        100% { margin-top: -6 * $marginTop;}
      }
      /////////////////////////////
      @keyframes scrollNumber7
      {
        0% { margin-top: 0px; }
        100% { margin-top: -7 * $marginTop;}
      }
    
      @-moz-keyframes scrollNumber7 /* Firefox */
      {
        0% { margin-top: 0px; }
        100% { margin-top: -7 * $marginTop;}
      }
    
      @-webkit-keyframes scrollNumber7 /* Safari 和 Chrome */
      {
        0% { margin-top: 0px; }
        100% { margin-top: -7 * $marginTop;}
      }
    
      @-o-keyframes scrollNumber7 /* Opera */
      {
        0% { margin-top: 0px; }
        100% { margin-top: -7 * $marginTop;}
      }
      /////////////////////////////
      @keyframes scrollNumber8
      {
        0% { margin-top: 0px; }
        100% { margin-top: -8 * $marginTop;}
      }
    
      @-moz-keyframes scrollNumber8 /* Firefox */
      {
        0% { margin-top: 0px; }
        100% { margin-top: -8 * $marginTop;}
      }
    
      @-webkit-keyframes scrollNumber8 /* Safari 和 Chrome */
      {
        0% { margin-top: 0px; }
        100% { margin-top: -8 * $marginTop;}
      }
    
      @-o-keyframes scrollNumber8 /* Opera */
      {
        0% { margin-top: 0px; }
        100% { margin-top: -8 * $marginTop;}
      }
      /////////////////////////////
      @keyframes scrollNumber9
      {
        0% { margin-top: 0px; }
        100% { margin-top: -9 * $marginTop;}
      }
    
      @-moz-keyframes scrollNumber9 /* Firefox */
      {
        0% { margin-top: 0px; }
        100% { margin-top: -9 * $marginTop;}
      }
    
      @-webkit-keyframes scrollNumber9 /* Safari 和 Chrome */
      {
        0% { margin-top: 0px; }
        100% { margin-top: -9 * $marginTop;}
      }
    
      @-o-keyframes scrollNumber9 /* Opera */
      {
        0% { margin-top: 0px; }
        100% { margin-top: -9 * $marginTop;}
      }
      /////////////////////////////
      .numbers-box {
        width: 57px;
        height: 50px;
        overflow-y: hidden;
        float: left;
        span {
          color: #666;
          width: 100%;
          height: 550px;
          font-size: 50px;
          label {
            width: 100%;
            float: left;
          }
          label:nth-child(1), label:nth-child(2), label:nth-child(3), label:nth-child(4), label:nth-child(5), label:nth-child(6), label:nth-child(7), label:nth-child(8), label:nth-child(9), label:nth-child(10) {
            padding-top: 0rem;
          }
        }
        .numbers-scroll00 {
          margin-top: -10 * $marginTop;
          animation: scrollNumber0 1s linear 1 normal;
          -moz-animation: scrollNumber0 1s linear 1 normal;
          -webkit-animation: scrollNumber0 1s linear 1 normal;
          -o-animation: scrollNumber0 1s linear 1 normal;
        }
        .numbers-scroll01 {
          margin-top: -10 * $marginTop;
          animation: scrollNumber0 0.9s linear 1 normal;
          -moz-animation: scrollNumber0 0.9s linear 1 normal;
          -webkit-animation: scrollNumber0 0.9s linear 1 normal;
          -o-animation: scrollNumber0 0.9s linear 1 normal;
        }
        .numbers-scroll02 {
          margin-top: -10 * $marginTop;
          animation: scrollNumber0 1.4s linear 1 normal;
          -moz-animation: scrollNumber0 1.4s linear 1 normal;
          -webkit-animation: scrollNumber0 1.4s linear 1 normal;
          -o-animation: scrollNumber0 1.4s linear 1 normal;
        }
        .numbers-scroll03 {
          margin-top: -10 * $marginTop;
          animation: scrollNumber0 1.2s linear 1 normal;
          -moz-animation: scrollNumber0 1.2s linear 1 normal;
          -webkit-animation: scrollNumber0 1.2s linear 1 normal;
          -o-animation: scrollNumber0 1.2s linear 1 normal;
        }
        .numbers-scroll04 {
          margin-top: -10 * $marginTop;
          animation: scrollNumber0 1.8s linear 1 normal;
          -moz-animation: scrollNumber0 1.8s linear 1 normal;
          -webkit-animation: scrollNumber0 1.8s linear 1 normal;
          -o-animation: scrollNumber0 1.8s linear 1 normal;
        }
        .numbers-scroll05 {
          margin-top: -10 * $marginTop;
          animation: scrollNumber0 1.6s linear 1 normal;
          -moz-animation: scrollNumber0 1.6s linear 1 normal;
          -webkit-animation: scrollNumber0 1.6s linear 1 normal;
          -o-animation: scrollNumber0 1.6s linear 1 normal;
        }
        .numbers-scroll1 {
          margin-top: -$marginTop;
          animation: scrollNumber1 1.2s linear 1 normal;
          -moz-animation: scrollNumber1 1.2s linear 1 normal;
          -webkit-animation: scrollNumber1 1.2s linear 1 normal;
          -o-animation: scrollNumber1 1.2s linear 1 normal;
        }
        .numbers-scroll2 {
          margin-top: -2 * $marginTop;
          animation: scrollNumber2 1.2s linear 1 normal;
          -moz-animation: scrollNumber2 1.2s linear 1 normal;
          -webkit-animation: scrollNumber2 1.2s linear 1 normal;
          -o-animation: scrollNumber2 1.2s linear 1 normal;
        }
        .numbers-scroll3 {
          margin-top: -3 * $marginTop;
          animation: scrollNumber3 1.2s linear 1 normal;
          -moz-animation: scrollNumber3 1.2s linear 1 normal;
          -webkit-animation: scrollNumber3 1.2s linear 1 normal;
          -o-animation: scrollNumber3 1.2s linear 1 normal;
        }
        .numbers-scroll4 {
          margin-top: -4 * $marginTop;
          animation: scrollNumber4 1.2s linear 1 normal;
          -moz-animation: scrollNumber4 1.2s linear 1 normal;
          -webkit-animation: scrollNumber4 1.2s linear 1 normal;
          -o-animation: scrollNumber4 1.2s linear 1 normal;
        }
        .numbers-scroll5 {
          margin-top: -5 * $marginTop;
          animation: scrollNumber5 1.2s linear 1 normal;
          -moz-animation: scrollNumber5 1.2s linear 1 normal;
          -webkit-animation: scrollNumber5 1.2s linear 1 normal;
          -o-animation: scrollNumber5 1.2s linear 1 normal;
        }
        .numbers-scroll6 {
          margin-top: -6 * $marginTop;
          animation: scrollNumber6 1.2s linear 1 normal;
          -moz-animation: scrollNumber6 1.2s linear 1 normal;
          -webkit-animation: scrollNumber6 1.2s linear 1 normal;
          -o-animation: scrollNumber6 1.2s linear 1 normal;
        }
        .numbers-scroll7 {
          margin-top: -7 * $marginTop;
          animation: scrollNumber7 1.2s linear 1 normal;
          -moz-animation: scrollNumber7 1.2s linear 1 normal;
          -webkit-animation: scrollNumber7 1.2s linear 1 normal;
          -o-animation: scrollNumber7 1.2s linear 1 normal;
        }
        .numbers-scroll8 {
          margin-top: -8 * $marginTop;
          animation: scrollNumber8 1.2s linear 1 normal;
          -moz-animation: scrollNumber8 1.2s linear 1 normal;
          -webkit-animation: scrollNumber8 1.2s linear 1 normal;
          -o-animation: scrollNumber8 1.2s linear 1 normal;
        }
        .numbers-scroll9 {
          margin-top: -9 * $marginTop;
          animation: scrollNumber9 1.2s linear 1 normal;
          -moz-animation: scrollNumber9 1.2s linear 1 normal;
          -webkit-animation: scrollNumber9 1.2s linear 1 normal;
          -o-animation: scrollNumber9 1.2s linear 1 normal;
        }
      }
    }

    打包使用即可。需要html版本的,请留言。

    本教程www.webfunny.cn 前端监控提供只需要简单几步就可以搭建一套属于自己的前端监控系统,快来试试吧 ^ _ ^

  • 相关阅读:
    Winform开发框架之终极应用 伍华聪 博客园
    DZ外部调用登陆
    利用服务定时执行
    winForm写cookie经过
    正则第一天
    NHibernate
    Databases supported by NHibernate
    定时执行
    NHibernate视频教程
    bernate异常及处理方法
  • 原文地址:https://www.cnblogs.com/warm-stranger/p/12378486.html
Copyright © 2011-2022 走看看