css3 实现数字滚动的动画组件 (react版)

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 前端监控提供;只需要简单几步就可以搭建一套属于自己的前端监控系统,快来试试吧 ^ _ ^。

 

上一篇:[Android阅读代码]android-async-http源码学习一


下一篇:双击word文档提示向程序发送命令出现问题(There was a problem sending the command to the program)(二)