首页 > 其他分享 >React数字滚动组件 numbers-scroll

React数字滚动组件 numbers-scroll

时间:2023-03-10 13:58:42浏览次数:63  
标签:滚动 数字 React animation numbers 组件 scroll

数字滚动组件,也可以叫数字轮播组件,这个名字一听就是非常普通常见的组件,第一反应就是想找找网上大佬的东西顶礼膜拜一下,这一搜,还真是没找到趁手的╮(╯▽╰)╭。

最近接了大屏的需求,数字滚动肯定是免不了的,所以开始撸袖子,造轮子了( numbers-scroll )。

首先给大家看下轮子的效果吧:

一、设计原理

如果要做到数字滚动效果,就一定要让数字有从下往上移动的感觉。如果只是纯粹的数字变化,显示出来的效果就会比较普通了,没有什么视觉上的冲击感,如图所示:

所以,我们需要数字在变化过程中,有种纸带往上抽动的感觉。初始状态中,数字都在显示框下方等待。数字滚动中,则根据数字的大小决定滚动速度,数字越大,滚动越快;数字越小,则滚动越慢,这样会有一种参差的感觉,滚动的效果也会让人觉得更自然一些。

二、实现方式

初始状态中,每个数字展示的窗口下边都有0-9这10个数字在等待中,传入具体数字后,每个窗口就可以开始移动数字的位置了。

移动数字的位置可以有三种方式:1. 通过js改变样式(虽然逻辑更容易实现,但是执行效率太低,直接放弃);2. 通过animation来控制margin-top的值。3. 通过animation来控制transform的值。

虽然个人觉得通过tranform来控制显示位置会更好些,但是目前采用的是方式二,控制margin-top的值来展示数字的位置,效果还算可以了,有兴趣的同学可以改造成transform。

React代码片段如下:

<span className={scrollClass}>
    <label style={numberStyle}>0</label>
    <label style={numberStyle}>1</label>
    <label style={numberStyle}>2</label>
    <label style={numberStyle}>3</label>
    <label style={numberStyle}>4</label>
    <label style={numberStyle}>5</label>
    <label style={numberStyle}>6</label>
    <label style={numberStyle}>7</label>
    <label style={numberStyle}>8</label>
    <label style={numberStyle}>9</label>
    <label style={numberStyle}>0</label>
</span>

Css代码片段如下:

.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;
}
@keyframes scrollNumber0 {
   0% { margin-top: 0px; }
   100% { margin-top: -1100;}
}

三、使用方式

1. 安装依赖:

npm install numbers-scroll --save

2. 引入数字滚动组件的两种示例:

// 示例1
import React, { useState } from 'react'
import NumbersScroll from 'numbers-scroll'

const MyNumberScroll = () => {
    const [number, setNumber] = useState(896507);
    return (
        <div className="example-container">
            <NumbersScroll
                split={true}
                value={number}
                numberStyle={{
                fontSize: 50,
                background: "#51a4e9",
                color: "#fff",
                marginLeft: 2,
                marginRight: 2
                }}
            />
        </div>
    )
}
// 示例2
import React, { Component } from "react"
import NumbersScroll from 'numbers-scroll'

class MyNumberScroll extends Component {
  constructor(props) {
    super(props)
    this.state = {
      number: 896507
    }
  }
  render() {
    const { number } = this.state
    return <div className="example-container">
      <NumbersScroll
        split={true}
        value={number}
        numberStyle={{
          fontSize: 50,
          background: "#51a4e9",
          color: "#fff",
          marginLeft: 2,
          marginRight: 2
        }}
      />
    </div>
  }
}

四、参数说明

为了能够让组件应用在更多场景中,可以传入4个参数:split,value,numberStyle,containerStyle;其中numberStyle,containerStyle可以分别控制数字和容器的样式,用户可以随时调整以适应自己的场景。

参数名 是否必须 默认值 描述
split fasle 是否加上分隔符
value 0 显示数字
numberStyle   数字的样式
containerStyle   容器的样式

 

numbers-scroll这个组件目前仅支持react,可以用于多种场景。如果需要支持vue或者其他功能需求的小伙伴,请给我留言吧。

 

 

标签:滚动,数字,React,animation,numbers,组件,scroll
From: https://www.cnblogs.com/warm-stranger/p/17201937.html

相关文章

  • jquery获取设置元素宽高位置height()、width()、offset()、position()、scrollTop()、
    ​​​​全栈工程师开发手册(作者:栾鹏)​​jquery系列教程2-style样式操作全解​​jquery获取设置元素宽高位置jquery的通过height()、width()、offset()、position()、s......
  • React+antd sorter实现排序并作汉化处理
    sorter实现排序sorter排序大致分为两种:第一种是数值类型:直接相加减就好第二种是字符串类型:需要用到 localeCompare方法 废话不多说,直接上代码     ......
  • IIS 前端发布-- React Ant Design Pro 篇
    前端发布--ReactAntDesignPro篇打开你的项目直接(build)发布,,,antd这个proxy.ts里的配置其实在生产环境是不生效没用,所以其实你在这里写啥都不影响。他只是用于你......
  • 打造让别人眼前一亮的Portfolio(从0到1) - 使用React和Three JS
        【打造让别人眼前一亮的Portfolio(从0到1)-使用React和ThreeJS】https://www.bilibili.com/video/BV1D54y1u7a7?vd_source=9dbcff019fe7cd087d0ea14c75f1546......
  • React学习笔记(三)—— 组件高级
    一、列表和keys1.1、ListsandKeys(列表和键)首先,我们回顾一下在javascript中怎么去变换列表。下面了的代码,我们用到了数组函数的map方法来实现数组的每一个值变成它的2......
  • xterm + react + antd pro 小坑记录
    xterm+react+antdpro小坑记录https://juejin.cn/post/6863271258113441805  Django运维系统基础功能之---web远程ssh终端https://blog.csdn.net/weixin_39098......
  • React Hooks源码深度解析
    作者:京东零售郑炳懿前言ReactHooks是React16.8引入的一个新特性,它允许函数组件中使用state和其他React特性,而不必使用类组件。Hooks是一个非常重要的概念,因为它们提......
  • React Hooks源码深度解析
    作者:京东零售郑炳懿前言​​ReactHooks​​是​​React​​16.8引入的一个新特性,它允许函数组件中使用​​state​​和其他React特性,而不必使用类组件。​​Hooks​​......
  • React Native TextInput输入组件,聚焦全选功能
    在onFocus在onFocus下有参数传回在target下有setSelection方法,打印可以传入初始和结尾值setSelection(start,end){if(inputRef.current!=null){......
  • scrollTo与scrollBy滚动 动画效果
    1.scrollTo(x,y)//指定滚动到x轴和y轴的位置2.scrollTo(options)//options有三个参数,(left,top,behavior),top等同于y-coordleft等同于x-coordbehavior类型Strin......