解决swiper动态改变数据后分页混乱问题

swiper动态改变数据后分页器的页数就变混乱了,导致内容展示不全。

本文的解决方法不能算是真正意义上的解决了问题。只是在展示上符合了要求。

效果图:

 

解决方法:

每次动态改变数据时都把原来的swiper删除,重新添加并初始化一个swiper,只是改变了swiper-wrapper里的数据。具体代码实现如下:

html:

<!--html-->
<div id="swiperBox">
    <div class="swiper-container" id="img_detail">
        <div class="swiper-wrapper" id="swiperImgs">
        </div>
        <!-- 分页器 -->
        <div class="swiper-pagination"></div>
    </div>
</div>

html部分就和官方文档里给出的例子一样的。我只是在swiper-container外边又套了一个<div>用于在动态改变数据的时候动态删除和添加swiper。

 

js

// js

var num = 7;//滑动窗口中图片的数量
var color = "red";//当前选中的包的颜色

window.onload = function () {
    this.init();
}

// 初始化滑动窗
function init() {
    for (var i = 1; i <= this.num; ++i) {
        $("#swiperImgs").append('<div class="swiper-slide"><img src="image/' + color + '/d' + i + '.JPG" style="width:100%;"></div>')
    }
    var mySwiper = new Swiper('.swiper-container', {
        loop: true,
        pagination: {
            el: '.swiper-pagination',
        }
    })
}

// 改变颜色
function changeColor(c, n,obj) {
    color = c;
    num = n;
    var parent=obj.parentNode;
    $(parent.childNodes).removeClass("selected");
    $(obj).addClass("selected");
    $("#swiperBox").empty(); //将原来的swiper删除掉
    $("#swiperBox").append('<div class="swiper-container" id="img_detail"><div class="swiper-wrapper" id="swiperImgs"></div><div class="swiper-pagination"></div></div>');//添加了一个新的swiper
    init();//对swiper添加内容并完成初始化
}

 

网上比较多的方法是给对swiper设置属性observe:true,或者改变数据后调用mySwiper.update()函数进行更新,我都试过了,但多少还是会出现一些问题,要不就是分页器的标签数不对,要不就是分页器标签不跟随移动等等。无奈之下用了这种方法,踏实了。

 

以下是我改变颜色的按钮的html:

<!-- 颜色选择器 -->
<div class="colorBox">
    <button onclick="changeColor('red',7,this)" class="selected"><img src="image/colorBut/red.png"/></button>
    <button onclick="changeColor('green',3,this)"><img src="image/colorBut/green.jpg"/></button>
</div>
posted @ 2019-12-25 16:04  程嘿嘿  阅读(4010)  评论(0编辑  收藏  举报