开发者问题收集

如何在悬停时暂停 React Swiper 中的自动播放?

2022-01-28
4948

我试图弄清楚如何在将鼠标悬停在滑动条上时暂停自动播放,但我无法在任何地方找到它

<Swiper
                    spaceBetween={0}
                    navigation={{
                        prevEl: navigationPrevRef.current,
                        nextEl: navigationNextRef.current,
                    }}
                    autoplay={{
                        delay: 3000,
                        pauseOnMouseEnter: true,
                    }}
>
2个回答

在这种情况下,您只需要将 pauseOnMouseEnter 属性设置为 true ,就像您所做的那样。问题似乎是因为您没有连接自动播放模块。

您应该已经导入了这些:

import { Autoplay, Navigation } from 'swiper'
import 'swiper/css'
import 'swiper/css/navigation'

现在 Autoplay 已导入,我们需要将其连接到单个 Swiper:

<Swiper
  // spaceBetween can be removed if you have it set to 0
  // spaceBetween={0}
  navigation={{
    prevEl: navigationPrevRef.current,
    nextEl: navigationNextRef.current,
  }}
  autoplay={{
    disableOnInteraction: false, // Optional, but recommended
    delay: 3000
    pauseOnMouseEnter: true,
  }}
  modules={[ Autoplay, Navigation ]}
>

希望这能有所帮助。Swiper 可能很麻烦。他们的文档非常详细。

andrilla
2022-07-25

因此我找到了一种解决方法,希望它能帮助那些仍然面临此问题的人。 只需为您的 swpier 提供引用,在您的父 div 上使用 onMouseEnter 和 onMouseLeave

import {useRef} from "react";

    const swiperRefLocal = useRef()

    const handleMouseEnter = () => {
        swiperRefLocal?.current?.swiper?.autoplay?.stop()
    };

    const handleMouseLeave = () => {
        swiperRefLocal?.current?.swiper?.autoplay?.start()
    };

<div onMouseEnter={handleMouseEnter} onMouseLeave={handleMouseLeave}>
   <Swiper
                    spaceBetween={0}
                    ref={swiperRefLocal}
                    navigation={{
                        prevEl: navigationPrevRef.current,
                        nextEl: navigationNextRef.current,
                    }}
                    autoplay={{
                        delay: 3000,
                    }}
>
</div>
Burhan Ali
2022-12-07