今天使用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更新。
其实iOS上不兼容的还真多啊,唉