亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

react實(shí)現(xiàn)列表滾動(dòng)組件功能

 更新時(shí)間:2023年09月28日 11:18:50   作者:zhoupenghui168  
在開(kāi)發(fā)項(xiàng)目的時(shí)候,從服務(wù)端獲取到數(shù)據(jù)列表后,展示給用戶看,需要實(shí)現(xiàn)數(shù)據(jù)自動(dòng)滾動(dòng)效果,怎么實(shí)現(xiàn)呢,下面小編給大家分享react實(shí)現(xiàn)列表滾動(dòng)組件功能實(shí)現(xiàn)代碼,感興趣的朋友一起看看吧

1.需求

在開(kāi)發(fā)項(xiàng)目的時(shí)候,從服務(wù)端獲取到數(shù)據(jù)列表后,展示給用戶看:需要實(shí)現(xiàn)數(shù)據(jù)自動(dòng)滾動(dòng)效果,怎么實(shí)現(xiàn)呢?如下圖所示:

2.實(shí)現(xiàn)

把上面需要實(shí)現(xiàn)的功能寫(xiě)成一個(gè)組件,頁(yè)面直接調(diào)用該組件即可,代碼如下:

要引入組件頁(yè)面的代碼:   

import Scroll from "../../components/Scroll";
const Index = () => {
 return (
        <div class={style.main}>
                <Scroll />
        </div>
    )
}
export default Index;

組件:

import style from "./style.less";
import React, { useEffect, useRef, useState } from "react";
const Scroll = () => {
        const timer = useRef(null);
        //這里的數(shù)據(jù)是通過(guò)服務(wù)端api接口獲取的
        const marqueeList = [
            {
                phone: "155****1111",
                content: "簽到獲取",
                money: 12.22,
            },
            {
                phone: "151****1111",
                content: "簽到獲取",
                money: 2,
            },
            {
                phone: "152****1111",
                content: "簽到獲取",
                money: 2.22,
            },
            ...
        ];
        //是否滾動(dòng)
        const [isScrolle, setIsScrolle] = useState(true);
        //滾動(dòng)速度,值越小,滾動(dòng)越快
        const scrollSpeed = 100;
        const warper = useRef();
        //原數(shù)據(jù)
        const childDom = useRef();
        //拷貝數(shù)據(jù)
        const childDomCopy = useRef();
        //鼠標(biāo)移動(dòng),移除方法
        const hoverHandler = (flag) => setIsScrolle(flag);
        useEffect(() => {
            // 設(shè)置輪播滾動(dòng)多拷貝一層,讓它無(wú)縫滾動(dòng)
            childDom.current.innerHTML = childDomCopy.current.innerHTML;
            if (isScrolle) {
                if (timer.current) {
                    clearInterval(timer.current);
                }
                timer.current = setInterval(() => {
                    warper.current.scrollTop >= childDom.current.scrollHeight
                        ? (warper.current.scrollTop = 0)
                        : warper.current.scrollTop++;
                }, scrollSpeed);
            }
            return () => {
                clearInterval(timer.current);
            };
        }, [isScrolle]);
        return (
            <div class={style.content}>
                <div class={style.parent} ref={warper}>
                    <div class={`${style.ul_scoll}`} ref={childDomCopy}>
                        {marqueeList.map((value, index) => (
                            <li
                                style={{backgroundColor: index % 2 == 0 ? "#S1AAAA" : "#ABCDEF"}}
                                key={value}
                                onMouseOver={() => hoverHandler(false)}
                                onMouseLeave={() => hoverHandler(true)}
                            >
                                <div class={style.li_intro}>
                                    <div>
                                        {value.phone}
                                    </div>
                                    <div>
                                        {value.content}
                                    </div>
                                    <div class={style.li_money_intro}>
                                        <div  class={style.li_money}>
                                            +{value.money}
                                        </div>
                                        <div  class={style.li_rmb}>
                                            RMB
                                        </div>
                                    </div>
                                </div>
                            </li>
                        ))}
                    </div>
                    <div class={`${style.ul_scoll}`} ref={childDomCopy}></div>
                </div>
            </div>
        );
};
export default Scroll;

css:

.content {
  width: 100%;
  height: 14.16rem;
  overflow: hidden;
  position: relative;
  margin: auto;
}
.parent {
  top: 1rem;
  position: relative;
  height: 11.16rem;
  overflow: hidden;
  line-height: 2.5rem;
  overflow-y: scroll;
  scrollbar-width: none;
  -ms-overflow-style: none;
}
.parent::-webkit-scrollbar {
  display: none;
}
.ul_scoll li {
  width: 100%;
  height: 2.5rem;
  font-size: 0.9rem;
  font-weight: bold;
  text-align: center;
  letter-spacing: 0.025rem;
  line-height: 2.5rem;
  color: red;
}
.li_intro {
  color: #205F59;
  font-weight: 930;
  flex-direction: row;
  align-items: center;
  justify-content: space-between;
  display: flex;
  padding-left: 0.25rem;
  padding-right: 0.25rem;
}
.li_money_intro {
  display:flex;
  color: #39B54A;
}
.li_oney {
  font-size: 1rem;
}
.li_rmb {
  color:#FF6000;
  margin-left:0.8rem;
  font-size: 0.8rem;
}

這樣就能夠?qū)崿F(xiàn)數(shù)據(jù)不停滾動(dòng)了

到此這篇關(guān)于react實(shí)現(xiàn)列表滾動(dòng)組件的文章就介紹到這了,更多相關(guān)react列表滾動(dòng)組件內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • React Hook 監(jiān)聽(tīng)localStorage更新問(wèn)題

    React Hook 監(jiān)聽(tīng)localStorage更新問(wèn)題

    這篇文章主要介紹了React Hook 監(jiān)聽(tīng)localStorage更新問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-10-10
  • React項(xiàng)目動(dòng)態(tài)設(shè)置title標(biāo)題的方法示例

    React項(xiàng)目動(dòng)態(tài)設(shè)置title標(biāo)題的方法示例

    這篇文章主要介紹了React項(xiàng)目動(dòng)態(tài)設(shè)置title標(biāo)題的方法示例,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-09-09
  • 淺談React組件在什么情況下會(huì)重新渲染

    淺談React組件在什么情況下會(huì)重新渲染

    當(dāng)我們使用React編寫(xiě)組件時(shí),組件的重新渲染是一個(gè)重要的概念,本文主要介紹了React組件在什么情況下會(huì)重新渲染,具有一定的參考價(jià)值,感興趣的可以了解一下
    2023-12-12
  • React中多語(yǔ)言的配置方式

    React中多語(yǔ)言的配置方式

    這篇文章主要介紹了React中多語(yǔ)言的配置方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-06-06
  • React實(shí)現(xiàn)文件分片上傳和下載的方法詳解

    React實(shí)現(xiàn)文件分片上傳和下載的方法詳解

    在當(dāng)今的前端開(kāi)發(fā)中,處理文件流操作已經(jīng)成為一個(gè)常見(jiàn)的需求,無(wú)論是上傳、下載、讀取、展示還是其他的文件處理操作,都需要高效且可靠地處理二進(jìn)制數(shù)據(jù),本文將深入探討如何使用 React 實(shí)現(xiàn)文件分片上傳和下載,并介紹相關(guān)的基本概念和技術(shù),需要的朋友可以參考下
    2023-08-08
  • 詳解React中函數(shù)式組件與類組件的不同

    詳解React中函數(shù)式組件與類組件的不同

    React?函數(shù)式組件與類組件的主要區(qū)別在于它們的定義和聲明方式以及它們之間的一些特性,所以本文就詳細(xì)的給大家講講React中函數(shù)式組件與類組件有何不同,需要的朋友可以參考下
    2023-09-09
  • react中事件處理與柯里化的實(shí)現(xiàn)

    react中事件處理與柯里化的實(shí)現(xiàn)

    本文主要介紹了react中事件處理與柯里化的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-05-05
  • react函數(shù)組件useState異步,數(shù)據(jù)不能及時(shí)獲取到的問(wèn)題

    react函數(shù)組件useState異步,數(shù)據(jù)不能及時(shí)獲取到的問(wèn)題

    這篇文章主要介紹了react函數(shù)組件useState異步,數(shù)據(jù)不能及時(shí)獲取到的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-08-08
  • 一文帶你了解React中的并發(fā)機(jī)制

    一文帶你了解React中的并發(fā)機(jī)制

    React 18.2.0 引入了一系列并發(fā)機(jī)制的新特性,旨在幫助各位開(kāi)發(fā)者更好地控制和優(yōu)化應(yīng)用程序的性能和用戶體驗(yàn),下面我們就來(lái)看看如何利用這些新特性構(gòu)建更高效、更響應(yīng)式的應(yīng)用程序吧
    2024-03-03
  • 如何在React?Native開(kāi)發(fā)中防止滑動(dòng)過(guò)程中的誤觸

    如何在React?Native開(kāi)發(fā)中防止滑動(dòng)過(guò)程中的誤觸

    在使用React?Native開(kāi)發(fā)的時(shí),當(dāng)我們快速滑動(dòng)應(yīng)用的時(shí)候,可能會(huì)出現(xiàn)誤觸,導(dǎo)致我們會(huì)點(diǎn)擊到頁(yè)面中的某一些點(diǎn)擊事件,誤觸導(dǎo)致頁(yè)面元素響應(yīng)從而進(jìn)行其他操作,表現(xiàn)出非常不好的用戶體驗(yàn)。
    2023-05-05

最新評(píng)論