今天使用swiper时,遇到一个问题:

使用Swiper轮播时,在iOS上面不会自动轮播

解决办法1:

var swiper = new Swiper('.swiper-container', { 
    observer:true,//修改swiper自己或子元素时,自动初始化swiper 
    observeParents:true//修改swiper的父元素时,自动初始化swiper 
});

解决办法2:

利用 setTimeout(()=>{ },0)的异步请求属性 即等待axios的get指令请求和渲染完 再执行

解决办法3:

或者可以在获取数据后在初始化swiper

实践解决方案

我的初始化配置是:


  useEffect(() => {
    swiperBanner &&
      swiperBanner.length > 0 &&
      new Swiper(".swiper-container-sign-result", {
        direction: "horizontal",
        slideActiveClass: "swiper-slide-active",
        loop: false,
        observer:true,
        observeParents:true,
        autoplayDisableOnInteraction : false,
        preventClicksPropagation: false,
        slidesPerView: "auto",
        centeredSlides: true,
        autoplay: true,
        spaceBetween: 0,
        initialSlide: 0,
        pagination: {
          el: ".sp-sign-result",
          clickable: true,
          bulletClass: "my-bullet",
          bulletActiveClass: "my-bullet-active",
        },
        on: {
          tap: function() {
            console.log("click");
          },
        },
      });
  }, [swiperBanner]);

这里使用了三个东西

        observer:true,
        observeParents:true,
        autoplayDisableOnInteraction : false,

autoplayDisableOnInteraction : false

官方解释:用户操作swiper之后,是否禁止autoplay。默认为true:停止。
如果设置为false,用户操作swiper之后自动切换不会停止,每次都会重新启动autoplay。

observer:true

启动动态检查器(OB/观众/观看者),当改变swiper的样式(例如隐藏/显示)或者修改swiper的子元素时,自动初始化swiper。

observeParents:true

将observe应用于Swiper的父元素。当Swiper的父元素变化时,例如window.resize,Swiper更新。