我使用了反应光滑的 PrevNextMethod
https://react-slick.neostack.com/docs/example/previous-next-methods
我将 Infinite 设置为 false 所以,轮播中不会显示循环。现在,如果在当前显示幻灯片之前没有可用的幻灯片,我想禁用上一个按钮,或者禁用下一个按钮,反之亦然..
官方文档中没有选项。有没有办法做到这一点?
我使用了反应光滑的 PrevNextMethod
https://react-slick.neostack.com/docs/example/previous-next-methods
我将 Infinite 设置为 false 所以,轮播中不会显示循环。现在,如果在当前显示幻灯片之前没有可用的幻灯片,我想禁用上一个按钮,或者禁用下一个按钮,反之亦然..
官方文档中没有选项。有没有办法做到这一点?
是的,可以使用beforeChange
回调来完成。
这是我从文档中的一个示例创建的基本示例:
export default class SimpleSlider extends Component {
state = { index: 0 };
next = () => {
this.slider.slickNext();
};
previous = () => {
this.slider.slickPrev();
};
beforeChange = (prev, next) => {
this.setState({ index: next });
};
render() {
const settings = {
infinite: false,
speed: 500,
slidesToShow: 1,
slidesToScroll: 1,
arrows: true,
beforeChange: this.beforeChange
};
const index = this.state.index;
return (
<div>
<h2> Single Item</h2>
<Slider {...settings} ref={c => (this.slider = c)}>
<div>
<h3>1</h3>
</div>
<div>
<h3>2</h3>
</div>
<div>
<h3>3</h3>
</div>
<div>
<h3>4</h3>
</div>
<div>
<h3>5</h3>
</div>
<div>
<h3>6</h3>
</div>
</Slider>
<div style={{ textAlign: "center" }}>
<button
className="button"
disabled={index === 0}
onClick={this.previous}
>
Previous
</button>
<button className="button" disabled={index === 5} onClick={this.next}>
Next
</button>
</div>
</div>
);
}
}
您只需要index
通过将其保持在某处的状态来跟踪它。
slick-disabled
使用自定义箭头,您可以在自定义箭头组件上获取 className 属性,当没有更多幻灯片要显示时,react-slick 将类添加到该箭头,因此请记住这一点,您可以检查className?.includes("slick-disabled")
,更多详细信息如下:
import React from "react";
import Slider from "react-slick";
const NextArrow: React.FC<ArrowsProps> = ({ onClick, className }) => (
<ArrowRightContainer onClick={onClick} isDisabled={className?.includes("slick-disabled")}>
<Icon name="chevron-right" />
</ArrowRightContainer>
);
const PrevArrow: React.FC<ArrowsProps> = ({ onClick, className }) => (
<ArrowLeftContainer onClick={onClick} isDisabled={className?.includes("slick-disabled")}>
<Icon name="chevron-right" styles={ArrowLeftIcon} />
</ArrowLeftContainer>
);
const settings = {
infinite: false,
speed: 350,
slidesToShow: 4,
slidesToScroll: 1,
nextArrow: <NextArrow />,
prevArrow: <PrevArrow />,
};
<Slider {...settings}>
.....
</Slider>