如果在 React slick 中当前幻灯片之前或之后没有可用的幻灯片,请禁用 Prev 或 Next 按钮。 (上一个下一个方法)
Disable Prev or Next Button if there is no slides available before or after the current slide in react slick. (PreviousNextMethod)
我使用了 React slick 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
保持在某处的状态即可跟踪它。
使用自定义箭头,您可以在自定义箭头组件上获得 className 属性,react-slick 将 class slick-disabled
添加到该箭头,如果它没有有更多的幻灯片要显示,所以考虑到这一点,您可以查看 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>
我使用了 React slick 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
保持在某处的状态即可跟踪它。
使用自定义箭头,您可以在自定义箭头组件上获得 className 属性,react-slick 将 class slick-disabled
添加到该箭头,如果它没有有更多的幻灯片要显示,所以考虑到这一点,您可以查看 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>