React实现列表内容自动向上滚动

目的:

React实现列表内容自动向上滚动


一、实现效果

列表内容无缝连接向上滚动
鼠标移入,滚动停止;
鼠标移出,滚动继续
在这里插入图片描述

示例:pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。

二、实现原理

1.html页面构成

1、ul>li,
ul外面包裹一层div,如果想要内容循环滚动无缝衔接,需要在原有ul后面还要有一个一样内容的ul。如下图:

红色框内为可视区域div(滚动区域)
   在这里插入图片描述代码如下(示例):

 <div className={
   styles.parent} ref={
   warper}>
        <div className={
   styles.child} ref={
   childDom1}>
            <li
              className={
   styles.deviceListItem}
            >
              <span>{
   item.k1}</span>
              <span className={
   styles.item}>{
   item.k2}</span>
              <span className={
   styles.item}>{
   item.k3}</span>
              <span className={
   styles[getColor(item.k61)]}>
                {
   getRank(item.k61)}
              </span>
              <span className={
   styles[getColor(item.k62)]}>
                {
   getRank(item.k62)}
              </span>
            </li>
          ))
        </div>
        <div className={
   styles.child} ref={
   childDom2}></div>
      </div>

2.CSS样式

实现滚动需要2个ul的高度大于外层可视高度div,注意div需设置overflow:hidden;

在这里插入图片描述

代码如下(示例):

<ul className={
   styles.child} ref={
   childDom1}>
          {
   list.map((item, index) => (
            <li
              className={
   styles.deviceListItem}
              key={
   index}
              onMouseOver={
  • 3
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
对于 React 的 TransitionGroup 组件,它可以帮助我们在子组件进入或离开时进行动画过渡。如果你需要异步更新 TransitionGroup 中的子组件,可以通过给子组件设置 key 值来实现动态添加或删除子组件。 例如,下面是一个异步添加子组件并向上循环滚动的示例代码: ```jsx import React, { useState, useEffect } from 'react'; import { CSSTransition, TransitionGroup } from 'react-transition-group'; function App() { const [items, setItems] = useState([]); useEffect(() => { const interval = setInterval(() => { setItems(prevItems => [...prevItems, { id: prevItems.length, value: Math.random() }]); }, 1000); return () => clearInterval(interval); }, []); const removeItem = id => { setItems(prevItems => prevItems.filter(item => item.id !== id)); }; return ( <div> <TransitionGroup className="list"> {items.map(item => ( <CSSTransition key={item.id} timeout={500} classNames="item"> <div className="item" onClick={() => removeItem(item.id)}> {item.value} </div> </CSSTransition> ))} </TransitionGroup> </div> ); } export default App; ``` 在这个例子中,我们使用 `setInterval` 来异步添加子组件。每个子组件都有一个随机的值来展示,并且可以通过点击子组件来删除它。当我们删除子组件时,TransitionGroup 会自动应用动画效果来过渡删除的子组件。同时,我们给每个子组件设置了一个唯一的 key 值,这样 React 就可以正确地处理子组件的添加和删除。 最后,我们还可以通过 CSS实现向上循环滚动的效果。例如,可以使用 `transform` 属性来实现向上移动的效果: ```css .item-enter { transform: translateY(100%); } .item-enter-active { transform: translateY(0); transition: transform 500ms; } .item-exit { transform: translateY(0); } .item-exit-active { transform: translateY(-100%); transition: transform 500ms; } ``` 这样,当有新的子组件加入时,就会从底部向上滑入,并且当有子组件删除时,会从顶部向上滑出。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值