最近在用H5做移動端項目,產品模型需要有個左右滑動輪播圖效果。
同事介紹swiper這款滑動插件,Swiper 是目前較為流行的移動端觸摸滑動插件,因為其簡單好用易上手,受到很多前端開發者的歡迎!於是馬上查看官方幫助文檔開始學習。
今天在我使用的時候遇到了辣手的問題,使用jquery的ajax動態循環生成當到第二頁的時候始終滑動不起來,chrome的手機開發者模式和真機模式全都滑動不起來!
官方規范:
<div class="swiper-container" ms-visible="result.status==1"> <div class="swiper-wrapper" > <!-- =======循環部分======= --> <div class="swiper-slide" ms-repeat="result.mediaList"> //此處為一個滑動頁內容 </div> <!-- ============== --> </div> </div>
測試代碼
<div class="swiper-container"> <div class="swiper-wrapper"> <div class="swiper-slide orange-slide swiper-slide-active"> <img src="../../images/center/ouya/ba01.jpg"> </div> <div class="swiper-slide orange-slide swiper-slide-active"> <img src="../../images/center/ouya/ba01.jpg"> </div> <div class="swiper-slide"> <img src="../../images/center/ouya/ba01.jpg"> </div> </div> <div class="swiper-pagination swiper-pagination-v"></div> </div>
當我在測試的時候,靜態復制n個塊。用Chrome手機開發模式調試左右滑動暢通無阻,排除了循環出錯的問題!再次翻閱官方文檔在初始化增加了2項設置(紅色文字):
var mySwiper = $('.swiper-container').swiper({ mode: 'horizontal', pagination: '.swiper-pagination', loop: true, observer: true,//修改swiper自己或子元素時,自動初始化swiper observeParents: true//修改swiper的父元素時,自動初始化swiper });
但動態加載后Chrome調試手機開發模式可以左右滑動了,很順通。於是真機測試,用蘋果手機,安卓各項主流手機依然左右滑動不了。再次崩潰~~
於是各種排除問題,終於在pc端+移動端完美解決了問題!問題出在初始化的時候放在html文件了,應該放在接口取值后找到swiper-wrapper類后馬上初始化!
$.ajax({ url: "memc/center/ouya/getChainImage", type: "get", dataType: "json", timeout: "30000", beforeSend: function() { $(".swiper-wrapper").html(""); }, success: function(res) { if (res.resCode == 1) { var ht = ''; $.each(res.data, function(i, v) { ht += '<div class="swiper-slide"><img src=' + v.optIcon + '></div>'; }); $(".swiper-container").find('.swiper-wrapper').html(ht); var mySwiper = $('.swiper-container').swiper({ mode: 'horizontal', pagination: '.swiper-pagination', loop: true, observer: true,//修改swiper自己或子元素時,自動初始化swiper observeParents: true//修改swiper的父元素時,自動初始化swiper }); } else { showTips(res.msg); } }, error: function() { showTips('焦點圖未獲取到'); } });
題外話:
swiper這個插件壓縮版有53kb分量還是過大,在移動端流量如黃金的平台下覺得還是太大。如果有更好的解決方案希望大家可以多多指教!