前端table自动轮播功能(js/ts+react+antd)

最近接到一个需求,需要把表格内容自动轮播。antd的组件table并没有提供轮播api(虽然有人提过意见,让他们加上,但他们的回复是自行封装。

那就只能自己做了。

首先,轮播,搞两个ref,用来获取高度,滑动位置,设置轮播时间。

const TableContainer = useRef<any>();
const timerRef = useRef<number>();

然后给table绑上ref,记得给table设置overflow。

         <Table
            id={'table'}
            ref={TableContainer}
            columns={columns}
            dataSource={data}
            pagination={false}
            scroll={{
              y: 230,
              x: '100%',
              scrollToFirstRowOnChange: true,
            }}
            style={{ overflow: 'scroll' }}
          />

写一个initialScroll方法。

const initialScroll = (data: any) => {
    let container = TableContainer.current;
    container = document
      .getElementById('table')
      ?.getElementsByTagName('div')[0]
      ?.getElementsByTagName('div')[1];
    if (data.length > 5) {
      timerRef.current = window.setInterval(() => {
        container.scrollTo({
          top: container.scrollTop + Number(46),
          behavior: 'smooth',
        });
        if (
          Math.ceil(container.scrollTop) >=
          Number(container.scrollHeight - container.clientHeight)
        ) {
          container.scrollTop = 0;
        }
      }, 2000);
    }
  };

useEffect出发轮询。

  useEffect(() => {
    if (data.length > 0) {
      initialScroll(data);
    }
    return () => {
      window.clearInterval(timerRef.current);
    };
  }, [data]);

当鼠标在table上时停止轮播。

          onMouseOver={() => {
            window.clearInterval(timerRef.current);
          }}
          onMouseOut={() => {
            initialScroll(trend);
          }}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值