昨天公司的一个产品需要添加 轮播图,选用了swiper轮播图插件,用的是swiper 的 4.2.0 版本;
因为数据是 通过 ajax 动态获取的,并且涉及到的多个模块切换都需要swiper轮播,所以在初始化 swiper 的时候 需要加上 observer 系列属性:
<!-- HTML 部分 -->
<div class="bannerClass"></div>
$.getJSON(url, function(data) {
$('.bannerClass').html('').html(TmplUtils.getBannerListTmpl(data.datas)) // 填充 swiper 的dom 结构
initBannerAnimate(true); // 初始化swiper
})
var bannerSwiper;
function initBannerAnimate(isLoop) { // 因为是移动端项目,所以并没有加左右箭头,有需要可自行加上
bannerSwiper = new Swiper('.swiper-container', {
pagination: {
el:'.swiper-pagination'
},
loop: isLoop,
observer: true, // 监听动态加载 dom 结构
observeParents: true,
observeSlideChildren: true,
autoplay: {
delay: 2000,
disableOnInteraction: false // 保证在手动滑动轮播图后能够自动滑动
}
});
}
注意点: 1、请求完数据后在渲染swiper的dom结构的时候,我这里是把 整个 swiper-container 都重新渲染,而不是只把 swiper-slider 添加到 swiper-wrapper中;
2、ajax 请求完数据并渲染完dom结构,需要整体 初始化一下swiper;
上面的代码 能够显示轮播图,并在多个模块之间切换能够正常工作,但有一个问题,pagination 并不能渲染;试了很多办法之后,无果。最后推荐使用 swiper 3.x (下载地址:https://pan.baidu.com/s/1kVBLmmF)的版本,具体代码实现如下:
var bannerSwiper;
function initBannerAnimate(isLoop) {
bannerSwiper = new Swiper('.swiper-container', {
pagination: '.swiper-pagination',
loop: isLoop,
observer: true,
observeParents:true,
autoplay: 2000,
autoplayDisableOnInteraction: false // 保证在手动滑动轮播图后能够自动滑动
});
}
上面代码和4.x版本动态数据的效果一样,并能够实现 pagination 的渲染。
THE END