React中如何通过点击space让Swiper轮播换幻灯片?
How to make Swiper carousel change slides by clicking space in React?
我在 React 应用程序中使用 "swiper": "6.8.4" 进行轮播。
我需要通过单击“Space”按钮来更改幻灯片。
默认情况下,它通过单击箭头进行更改。
你能告诉我怎么做吗?
function Carousel() {
document.addEventListener("keydown", function(e){
if(KeyboardEvent.code == 'Space') {
swiper.slideNext(); //not working
}
if(e.keyCode == 32) {
swiper.slideNext(); //not working
}
});
return (
<div className={classes.carouselWrapper}>
<Swiper
autoplay={{
delay: 2500,
disableOnInteraction: false,
}}
keyboard={{
enabled: true,
onlyInViewport: true,
}}
pagination={true}
className="mySwiper"
cssMode={true}
loop={false}
scrollbar={{draggable: true}}
modules={[Autoplay, Navigation, Pagination, Keyboard]}
mousewheel={true}
onSwiper={swiper => console.log(swiper)}
slidesPerView={1}
>
<button>
Change slide by clicking space
</button>
<SwiperSlide>
1
</SwiperSlide>
<SwiperSlide>
2
</SwiperSlide>
</Swiper>
document.body.onkeyup = function(e){
if(e.keyCode == 32){
swiper.slideNext();
}
您还可以检查是否有任何其他库正在使用 spacebarr 的事件侦听器,这可能会中断您的进程
您要做的第一件事是将 swiper
保存到状态,以便您可以调用 slideNext
,您可以使用 onSwiper
函数来完成此操作。然后使用 useEffect
添加和删除 keydown
侦听器。
function Carousel() {
const [swiper, setSwiper) = useState(null);
useEffect(() => {
const keydownHandler = e => {
if(swiper && e.keyCode == 32) {
e.preventDefault();
swiper.slideNext();
}
}
document.addEventListener('keydown', keydownHandler);
return () => {
document.removeEventListener('keydown', keydownHandler);
}
}, [swiper])
return (
<div className={classes.carouselWrapper}>
<Swiper
autoplay={{
delay: 2500,
disableOnInteraction: false,
}}
keyboard={{
enabled: true,
onlyInViewport: true,
}}
pagination={true}
className="mySwiper"
cssMode={true}
loop={false}
scrollbar={{draggable: true}}
modules={[Autoplay, Navigation, Pagination, Keyboard]}
mousewheel={true}
onSwiper={setSwiper}
slidesPerView={1}
>
<button>
Change slide by clicking space
</button>
<SwiperSlide>
1
</SwiperSlide>
<SwiperSlide>
2
</SwiperSlide>
</Swiper>
)
}
请记住,浏览器使用 space
向下滚动页面,您可能不想阻止默认操作。
我在 React 应用程序中使用 "swiper": "6.8.4" 进行轮播。
我需要通过单击“Space”按钮来更改幻灯片。 默认情况下,它通过单击箭头进行更改。 你能告诉我怎么做吗?
function Carousel() {
document.addEventListener("keydown", function(e){
if(KeyboardEvent.code == 'Space') {
swiper.slideNext(); //not working
}
if(e.keyCode == 32) {
swiper.slideNext(); //not working
}
});
return (
<div className={classes.carouselWrapper}>
<Swiper
autoplay={{
delay: 2500,
disableOnInteraction: false,
}}
keyboard={{
enabled: true,
onlyInViewport: true,
}}
pagination={true}
className="mySwiper"
cssMode={true}
loop={false}
scrollbar={{draggable: true}}
modules={[Autoplay, Navigation, Pagination, Keyboard]}
mousewheel={true}
onSwiper={swiper => console.log(swiper)}
slidesPerView={1}
>
<button>
Change slide by clicking space
</button>
<SwiperSlide>
1
</SwiperSlide>
<SwiperSlide>
2
</SwiperSlide>
</Swiper>
document.body.onkeyup = function(e){ if(e.keyCode == 32){ swiper.slideNext(); }
您还可以检查是否有任何其他库正在使用 spacebarr 的事件侦听器,这可能会中断您的进程
您要做的第一件事是将 swiper
保存到状态,以便您可以调用 slideNext
,您可以使用 onSwiper
函数来完成此操作。然后使用 useEffect
添加和删除 keydown
侦听器。
function Carousel() {
const [swiper, setSwiper) = useState(null);
useEffect(() => {
const keydownHandler = e => {
if(swiper && e.keyCode == 32) {
e.preventDefault();
swiper.slideNext();
}
}
document.addEventListener('keydown', keydownHandler);
return () => {
document.removeEventListener('keydown', keydownHandler);
}
}, [swiper])
return (
<div className={classes.carouselWrapper}>
<Swiper
autoplay={{
delay: 2500,
disableOnInteraction: false,
}}
keyboard={{
enabled: true,
onlyInViewport: true,
}}
pagination={true}
className="mySwiper"
cssMode={true}
loop={false}
scrollbar={{draggable: true}}
modules={[Autoplay, Navigation, Pagination, Keyboard]}
mousewheel={true}
onSwiper={setSwiper}
slidesPerView={1}
>
<button>
Change slide by clicking space
</button>
<SwiperSlide>
1
</SwiperSlide>
<SwiperSlide>
2
</SwiperSlide>
</Swiper>
)
}
请记住,浏览器使用 space
向下滚动页面,您可能不想阻止默认操作。