解决ajax异步请求数据后swiper不能循环轮播(loop失效)问题、滑动后不能轮播的问题。

问题描述:

       1、我使用axios异步请求后台的图片进行渲染后不能实现循环轮播,也就是loop失效,但是静态写死的情况下不会出现这种问题。

       2、

分析:

        swiper的机制是:初始化的时候将swiper-warpperslide类下的最后一个swiper-slide块克隆到第一个的位置,将第一个swiper-slide块克隆岛最后一个的位置,然后自动扫描swiper-warpperslide类下有多少个swiper-slide滑块,则允许滑动多少个块。因为我们异步请求数据之前,swiper-warpperslide类下没有swiper-slide滑块,所以不会出现循环轮播的效果。

解决办法:

        在axios请求后的成功回调方法中初始化swiper方法。

        解决 滑动后不能自动轮播:将  disableOnInteraction:false 写在autoplay内

           

 

以下是react项目中的代码:

 

 1 export default class Fime extends Component{
 2     constructor(){
 3         super();
 4         this.state={
 5             bannerImgArr:[]
 6         }
 7     }
 8     componentDidMount(){
 9         // 轮播
10         // axios请求后台图片
11         getBannerList().then((result)=>{
12            this.setState({
13                bannerImgArr:result
14            },()=>{
15             //    初始化swiper
16              new Swiper('.swiper-container', {
17                 observer: true,
18                 direction:'horizontal',
19                 loop: true,
20                 initialSlide:0,
21                 speed:1000,
22                 autoplay:{
23                     delay:2000,
24                     disableOnInteraction:false, //解决滑动后不能轮播的问题
25                 }, 
26                 // 注意分页器的写法:
27                 pagination: {
28                     el:'.swiper-pagination'
29                 },
30               })
31            })
32         })
33     }
34     render(){
35             let imgHtml=this.state.bannerImgArr.map((item,index)=>{
36                 return(
37                     <div className="swiper-slide"  key={index}>
38                         <img src={item} />
39                     </div>
40                 )
41             })
42         return (
43             <div className='film-page'>
44                 <div className='bannner-box'>
45                 {/* 轮播图部分 */}
46                     <div className="swiper-container">
47                         <div className="swiper-wrapper">
48                             {imgHtml}
49                         </div>
50                         <div className="swiper-pagination"></div>
51                     </div>
52                 </div>
53             </div>
54         )
55     }
56 }

 效果展示:

   

posted @ 2019-01-10 15:13  唯美(vmei)  阅读(7107)  评论(2编辑  收藏  举报