84669 person learning
152542 person learning
20005 person learning
5487 person learning
7821 person learning
359900 person learning
3350 person learning
180660 person learning
48569 person learning
18603 person learning
40936 person learning
1549 person learning
1183 person learning
32909 person learning
https://jsfiddle.net/aLq1b11f/
使用swiper进行轮播效果,出现了一个奇怪的问题,不知是不是bug,多次点击切换button之后 ,滑动轮播图,底下的分页小点点就不动了?
业精于勤,荒于嬉;行成于思,毁于随。
之前没用过Swiper,专门去官网看了一下demo和API。
楼主的问题不是Swiper插件出现Bug,而是你在createSwiper()函数中,用一个局部变量"var swiper = Swiper()"去创建一个Swiper实例后,再次调用createSwiper()函数时,没有对之前创建的实例进行释放,从而出现问题。刚才测试了一下,你的方法不清楚会不会造成内存泄漏,但是Pagination在"loop: true"时,会出现计算错误,导致你所谓的bug。
修改如下:
$(function() { $("button").click(function() { var index = $(this).index(); var swiper; $("body").find('.wrap-container').eq(index).show().siblings('.wrap-container').hide(); if(swiper !== undefined) { swiper.destroy(); } swiper = createSwiper(1 + index); }); }); function createSwiper(index) { var swiper = new Swiper('.swiper' + index, { pagination: '.pagination' + index, paginationClickable: true, loop: true, paginationBulletRender: function(index, className) { return '<span class="' + className + '">' + (index + 1) + '</span>'; } }); return swiper; }
======================目测真的是Swiper插件本身存在的Bug,对同一个swiper重复进行初始化后,Pagination就无法使用了,楼主有空可以在官网那里反馈一下。暂时想到一个解决方案是用两个全局变量来保存两个Swiper的初始化状态,然后根据对应的index和swiper状态来判断是否进行初始化,如果您有更好的解决方案,麻烦也告知一下,谢谢!
$(function(){ var swiper1, swiper2; $("button").click(function(){ var index = $(this).index(); $("body").find('.wrap-container').eq(index).show().siblings('.wrap-container').hide(); if(index === 0 && swiper1 === undefined) { swiper1 = createSwiper(1); } else if(index === 1 && swiper2 === undefined) { swiper2 = createSwiper(2); } }); }); function createSwiper(index){ var swiper = new Swiper('.swiper'+index, { pagination: '.pagination'+index, paginationClickable: true, loop:true, paginationBulletRender: function (index, className) { return '<span class="' + className + '">'+(index+1)+'</span>'; } }); return swiper; }
将var swiper = new Swiper('.swiper-container',{
......
});.swiper-container : 这是class选择器<p class="swiper-container" >这里的swiper-container,是原生样式,所以不能改,你可以把这里换成id="swiper-container-id"<p class="swiper-container" id="swiper-container-id">var swiper = new Swiper('.swiper-container-id',{
......(这就ok了)
});
之前没用过Swiper,专门去官网看了一下demo和API。
楼主的问题不是Swiper插件出现Bug,而是你在createSwiper()函数中,用一个局部变量"var swiper = Swiper()"去创建一个Swiper实例后,再次调用createSwiper()函数时,没有对之前创建的实例进行释放,从而出现问题。
刚才测试了一下,你的方法不清楚会不会造成内存泄漏,但是Pagination在"loop: true"时,会出现计算错误,导致你所谓的bug。
修改如下:
======================
目测真的是Swiper插件本身存在的Bug,对同一个swiper重复进行初始化后,Pagination就无法使用了,楼主有空可以在官网那里反馈一下。
暂时想到一个解决方案是用两个全局变量来保存两个Swiper的初始化状态,然后根据对应的index和swiper状态来判断是否进行初始化,如果您有更好的解决方案,麻烦也告知一下,谢谢!
将
var swiper = new Swiper('.swiper-container',{
});
.swiper-container : 这是class选择器
<p class="swiper-container" >
这里的swiper-container,是原生样式,所以不能改,你可以把这里换成
id="swiper-container-id"
<p class="swiper-container" id="swiper-container-id">
var swiper = new Swiper('.swiper-container-id',{
});