需求:表格显示6条数据,默认2秒上翻一条。五秒获取一次新数据。

核心代码:

1.获取了一个名为TableContainer的引用,然后使用getElementById方法获取id为'table'的元素,并尝试获取该元素下的第一个div的第二个div。

2.判断data的长度是否大于6来决定是否执行后续操作。如果data长度大于6,则设置一个定时器timerRef,每2000毫秒执行一次回调函数

3.回调函数内部将容器元素向下滚动44个像素,并使用behavior属性设置平滑滚动的行为。

const initialScroll = (data: any) => {

    let container = TableContainer.current;

    container = document

      .getElementById('table')

      ?.getElementsByTagName('div')[0]

      ?.getElementsByTagName('div')[1];

    if (data.length > 6) {

      timerRef.current = window.setInterval(() => {

        container.scrollTo({

          top: container.scrollTop + Number(44),

          behavior: 'smooth',

        });

        if (

          Math.ceil(container.scrollTop) >= Number(container.scrollHeight - container.clientHeight)

        ) {

          container.scrollTop = 0;

        }

      }, 2000);

    }

  };

 4.在回调函数内还有一个判断条件,如果容器的scrollTop值等于容器的scrollHeight减去容器的clientHeight时,将scrollTop重置为0,实现了循环滚动的效果。

表格列的配置描述:

 const columns: any = [

    {

      title: '检测日期',

      dataIndex: 'checkTime',

      width: 105,

      ...styless,

      render(text: any, record: any, index: any) {

        return <span key={index}>{moment(text).format('MM-DD  HH:mm:ss')}</span>;

      },

    },

    {

      title: '姓名',

      dataIndex: 'name',

      ...styless,

      // width: 60,

      render(text: any, record: any, index: any) {

        return <>{text?.replace(/.$/, '*')}</>;

      },

    },

    {

      title: '企业名称',

      dataIndex: 'companyName',

      hideInTable: true,

      ...styless,

      width: 165,

    },

    {

      title: '检测项目数',

      dataIndex: 'total',

      // width: 80,

      ...styless,

    },

    {

      title: '通过项目数',

      dataIndex: 'frequency',

      ...styless,

      // width: 80,

      render(text: any, record: any, index: any) {

        return (

          <span key={index} style={record.total != text ? { color: '#FFA959' } : {}}>

            {text}

          </span>

        );

      },

    },

  ];

html部分

<Table

          id={'table'}

          ref={TableContainer}

          rowClassName={'hover-row'}

          columns={columns}

          dataSource={formData}

          pagination={false}

          locale={{ emptyText: '暂无数据' }}

          scroll={{

            y: 280,

            x: '100%',

            scrollToFirstRowOnChange: true,

          }}

          className={style.table}

          style={{ overflowY: 'hidden' }}

        />

最后:

根据data的长度自动滚动TableContainer元素。当data长度大于6时,每2秒自动滚动一次,滚动距离为44个像素,达到底部时返回顶部。

效果图

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐