You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Swiper的特定Slide满足指定条件时禁用autoplay自动播放

解决方案

要控制Swiper的自动播放状态,只需获取Swiper实例后调用其自带的autoplay启停方法即可,修改后的代码如下:

import { useState, useRef } from 'react';
import Hero1 from "./Hero1/Hero1";
import Hero2 from "./Hero2/Hero2";
import Hero3 from "./Hero3/Hero3";
import { Swiper, SwiperSlide } from "swiper/react/swiper-react.js";

// 样式导入
import "swiper/swiper.scss";
import "swiper/modules/navigation/navigation.scss";
import "swiper/modules/pagination/pagination.scss";
import "swiper/modules/autoplay/autoplay.scss";
import "swiper/modules/effect-fade/effect-fade.scss";
import "swiper/swiper-bundle.min.css";

import SwiperCore, { EffectFade, Autoplay, Navigation } from "swiper";
import "./Header.css";

SwiperCore.use([EffectFade, Navigation, Autoplay]);

function Carouselgal() {
  const [duration, setduration] = useState(3000);
  // 声明ref存储Swiper实例
  const swiperRef = useRef(null);

  // 暂停自动播放方法
  const stopAutoplay = () => {
    if (swiperRef.current?.autoplay) {
      swiperRef.current.autoplay.stop();
    }
  };

  // 恢复自动播放方法
  const startAutoplay = () => {
    if (swiperRef.current?.autoplay) {
      swiperRef.current.autoplay.start();
    }
  };

  return (
    <>
      <Swiper
        autoplay={{ delay: duration, disableOnInteraction: false }}
        navigation={true}
        loop={true}
        className="home__carousel"
        effect="fade"
        // 获取Swiper实例存入ref
        onSwiper={(swiper) => swiperRef.current = swiper}
      >
        <SwiperSlide>
          <Hero1 />
        </SwiperSlide>
        <SwiperSlide data-swiper-autoplay="10000">
          {/* 给Hero2传递轮播控制方法 */}
          <Hero2 stopAutoplay={stopAutoplay} startAutoplay={startAutoplay} />
        </SwiperSlide>
        <SwiperSlide>
          <Hero3 />
        </SwiperSlide>
      </Swiper>
    </>
  );
}

export default Carouselgal;

Hero2组件内调用逻辑

在Hero2组件的表单唤起按钮点击事件中调用stopAutoplay暂停轮播,表单关闭时调用startAutoplay恢复轮播即可,示例如下:

import { useState } from 'react';

function Hero2({ stopAutoplay, startAutoplay }) {
  const [showForm, setShowForm] = useState(false);

  const openFormHandle = () => {
    setShowForm(true);
    // 唤起表单时暂停轮播
    stopAutoplay();
  };

  const closeFormHandle = () => {
    setShowForm(false);
    // 关闭表单时恢复轮播
    startAutoplay();
  };

  return (
    <div className="hero2-wrap">
      <button onClick={openFormHandle}>打开表单</button>
      {showForm && (
        <div className="form-box">
          {/* 表单内容 */}
          <button onClick={closeFormHandle}>关闭表单</button>
        </div>
      )}
    </div>
  )
}
export default Hero2;

内容的提问来源于stack exchange,提问作者Saraswat Majumder

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 14:54:04