react函数组件无缝滚动_react 函数组件实现一个无限循环的轮播器,不使用任何hook和轮播UI库
时间: 2024-02-28 10:52:43 浏览: 158
react-carousel:一个旨在尽可能灵活的React轮播组件
好的,实现一个无限循环的React函数组件轮播器,不使用任何hook和轮播UI库,可以按照以下步骤进行:
1. 创建一个React函数组件,命名为Carousel。
2. 在组件内部使用useState hook来管理state,包括图片数据、当前图片的索引、轮播定时器等。代码如下:
```
import React, { useState, useEffect } from 'react';
function Carousel() {
const [images, setImages] = useState([
{ id: 1, src: 'image1.jpg' },
{ id: 2, src: 'image2.jpg' },
{ id: 3, src: 'image3.jpg' },
{ id: 4, src: 'image4.jpg' },
{ id: 5, src: 'image5.jpg' },
]);
const [currentIndex, setCurrentIndex] = useState(0);
const [timer, setTimer] = useState(null);
useEffect(() => {
const timer = setInterval(() => {
handleNext();
}, 3000);
setTimer(timer);
return () => clearInterval(timer);
}, [currentIndex]);
const handleNext = () => {
const nextIndex = currentIndex === images.length - 1 ? 0 : currentIndex + 1;
setCurrentIndex(nextIndex);
};
const handlePrev = () => {
const prevIndex = currentIndex === 0 ? images.length - 1 : currentIndex - 1;
setCurrentIndex(prevIndex);
};
const prevIndex = currentIndex === 0 ? images.length - 1 : currentIndex - 1;
const nextIndex = currentIndex === images.length - 1 ? 0 : currentIndex + 1;
return (
<div className="carousel">
<div className="carousel-images">
<img src={images[prevIndex].src} alt="prev" />
<img src={images[currentIndex].src} alt="current" />
<img src={images[nextIndex].src} alt="next" />
</div>
<div className="carousel-buttons">
<button onClick={handlePrev}>Prev</button>
<button onClick={handleNext}>Next</button>
</div>
</div>
);
}
export default Carousel;
```
3. 在CSS中设置轮播图片的样式,包括绝对定位、宽度、高度等。代码如下:
```
.carousel-images {
position: relative;
width: 100%;
height: 400px;
}
.carousel-images img {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
object-fit: cover;
}
.carousel-images img:nth-child(2) {
z-index: 1;
}
.carousel-images img:first-child {
z-index: 2;
transform: translateX(-100%);
}
.carousel-images img:last-child {
transform: translateX(100%);
}
```
这样就完成了一个简单的React函数组件无缝滚动轮播器的实现。注意,由于函数组件没有生命周期方法,因此使用了useEffect hook来启动轮播定时器和清除定时器。
阅读全文