我有一个反应代码,它显示了一个包含很多项目的滑块,例如Netflix滑块,但是到达最后一个项目时它没有循环。
我是新来的反应者,所以我需要知道如何使用此代码来实现无限循环。
const Slider = ({ children, activeSlide }) => {
const [currentSlide, setCurrentSlide] = useState(activeSlide);
const { width, elementRef } = useSizeElement();
const {
handlePrev,
handleNext,
slideProps,
containerRef,
hasNext,
hasPrev
} = useSliding(width, React.Children.count(children));
const handleSelect = movie => {
setCurrentSlide(movie);
};
const handleClose = () => {
setCurrentSlide(null);
localStorage.removeItem("current_video_id");
};
const contextValue = {
onSelectSlide: handleSelect,
onCloseSlide: handleClose,
elementRef,
currentSlide
};
return (
<SliderContext.Provider value={contextValue}>
<SliderWrapper>
<div className={cx("slider", { "slider--open": currentSlide != null })}>
<div ref={containerRef} className="slider__container" {...slideProps}>
{children}
</div>
</div>
{hasPrev && <SlideButton onClick={handlePrev} type="prev" />}
{hasNext && <SlideButton onClick={handleNext} type="next" />}
</SliderWrapper>
{currentSlide && <Content movie={currentSlide} onClose={handleClose} />}
</SliderContext.Provider>
);
};
这是滑动脚本
import { useState, useRef, useEffect } from 'react'
const PADDINGS = 110;
const useSliding = (elementWidth, countElements) => {
const containerRef = useRef(null);
const [containerWidth, setContainerWidth] = useState(0);
const [distance, setDistance] = useState(0);
const [totalInViewport, setTotalInViewport] = useState(0)
const [viewed, setViewed] = useState(0);
useEffect(() => {
const containerWidth = containerRef.current.clientWidth - PADDINGS;
setContainerWidth(containerWidth);
setTotalInViewport(Math.floor(containerWidth / elementWidth));
}, [containerRef.current]);
const handlePrev = () => {
setViewed(viewed - totalInViewport);
setDistance(distance + containerWidth);
}
const handleNext = () => {
setViewed(viewed + totalInViewport);
setDistance(distance - containerWidth)
}
const slideProps = {
style: { transform: `translate3d(${distance}px, 0, 0)` }
};
const hasPrev = distance < 0;
const hasNext = (viewed + totalInViewport) < countElements;
return { handlePrev, handleNext, slideProps, containerRef, hasPrev, hasNext };
}
我知道我们可以通过复制内容来实现这一点,但是我不知道该如何使用此脚本来实现。