【Swiper】4.3.2 自動滾屏錯位問題解決(含demo)
阿新 • • 發佈:2018-12-25
起因:
Swiper由於設定了autoplay,會自己滾動,怎麼解決吶,我先升級到了4.3.2發現,預設呼叫沒有解決這個問題,查看了Swiper API 發現了個解決方式,分享給大家。
PS: 查看了3.X.X 的API 感覺沒辦法解決,建議升級到4.X.X版本 , 不能完全相容,但是改動成本不大
解題思路:
1.分析原因
滾動錯位原因我分析有兩個
A. 前後建立了兩首尾個元素, 導致獲取的不是真正的元素,下圖是 4個頁面 + 兩個 紅框的首尾
B.手勢操作時,沒有暫停當前滾動中的迴圈,導致滾動和切換同步操作最後錯位
2.嘗試解決方法
問題A 由於實現機制問題,解決起來不方便,所以主要 解決問題B
問題B 解決思路(劃重點):
A. 監聽滾動事件,查詢是否有相關封裝的API
B. 如何呼叫滾動監聽
C.如何暫停和開啟迴圈
D.如何串聯使用
解決:
1.在 touchStart 的時候 暫停 迴圈
2.在 touchEnd 的時候 開啟 迴圈
3.優化:設定全域性變數,避免過快操作導致的問題
具體程式碼:
JS程式碼很簡單啦,給大家參考下
// 全域性變數 let meetingSwiper; let touchnow = false; // 設定Swiper meetingSwiper = new Swiper('.main_meeting', { pagination: { el: '.swiper-pagination-meeting', clickable: true, }, loop: true, autoplay: { disableOnInteraction: true, }, observer: true, }); // 關閉迴圈 meetingSwiper.on("touchStart", function() { // console.log('Swiper touchStart'); meetingSwiper.autoplay.stop(); }); // 開啟迴圈 meetingSwiper.on("touchEnd", function() { // alert('Swiper touchend'); // console.log('Swiper touchEnd'); if (!touchnow) { touchnow = true; window.setTimeout(function() { meetingSwiper.autoplay.start(); touchnow = false; // console.log('Swiper touchEnd'); }, 100); } });