简单实现react hooks列表自动向上滚动,进入暂停,离开继续

import React, { useEffect, useRef, useState } from 'react';

import './1.css';

function App() {

    const [list] = useState([1, 2, 3, 4, 5, 6, 7, 9, 10, 11, 12, 13]);

    const [isScrolle, setIsScrolle] = useState(true);

    // 滚动速度,值越小,滚动越快

    const speed = 30;

    const warper = useRef();

    const childDom1 = useRef();

    const childDom2 = useRef();

    // 开始滚动

    useEffect(() => {

        // 多拷贝一层,让它无缝滚动

        childDom2.current.innerHTML = childDom1.current.innerHTML;

        let timer;

        if (isScrolle) {

            timer = setInterval(

                () =>

                    warper.current.scrollTop >= childDom1.current.scrollHeight

                        ? (warper.current.scrollTop = 0)

                        : warper.current.scrollTop++,

                speed

            );

        }

        return () => {

            clearTimeout(timer);

        };

    }, [isScrolle]);

    const hoverHandler = (flag) => setIsScrolle(flag);

    return (

        <>

            <div className='parent' ref={warper}>

                <div className='child' ref={childDom1}>

                    {list.map((item) => (

                        <li

                            key={item}

                            onMouseOver={() => hoverHandler(false)}

                            onMouseLeave={() => hoverHandler(true)}

                        >

                            {item}

                        </li>

                    ))}

                </div>

                <div className='child' ref={childDom2}></div>

            </div>

        </>

    );

}

export default App;

Css: 

.parent {

    width: 300px;

    height: 40vh;

    overflow-y: scroll;

    scrollbar-width: none;

    -ms-overflow-style: none;

}

.parent::-webkit-scrollbar {

    display: none;

}

/*设置的子盒子高度大于父盒子,产生溢出效果*/

.child {

    height: auto;

}

.child li {

    height: 50px;

    margin: 2px 0;

    background: #009678;

}

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • -工具类 node、npm、eslint、pretter 语法类 es5、es6 概念类 SPA:单页面应用 MP...
    xinmin阅读 328评论 0 0
  • 1.useState 使用单个 state 变量还是多个 state 变量useState 的出现,让我们可以使用...
    MelousJ阅读 600评论 0 0
  • 1 关于hook 1.1 为什么使用hook 在react类组件(class)写法中,有setState和生命周期...
    江湖yi山人阅读 1,903评论 0 3
  • hooks 定义 类型 默认 props 坑 防抖等函数,因为函数变了而没执行,必须自己封装一次,用ref存起来t...
    轰遍天下阅读 1,205评论 0 0
  • 我是黑夜里大雨纷飞的人啊 1 “又到一年六月,有人笑有人哭,有人欢乐有人忧愁,有人惊喜有人失落,有的觉得收获满满有...
    陌忘宇阅读 8,607评论 28 53