1. 程式人生 > >解決移動端頁面滑動穿透問題

解決移動端頁面滑動穿透問題

 前幾天遇到移動端頁面穿透問題相信很多人也遇到過相應的情況    這個問題特別頑固  電腦端用谷歌移動介面測試沒有問題 但是安卓 ios 還是會有問題  而且安卓 和 ios 下面兩種放法  支援還不一樣導致這個問題弄了很久    

內容有點多請詳細閱讀!!!!

就像這個情況 滑動答案的時候 答案到了底部繼續滑動 題乾的頁面也會跟著滑動 為了解決這個問題 也上網找了很多相關問題 但是都沒有解決  

網上好多說用阻止預設事件 但是加上這個屬性 會讓本身也滑動不了 所以這個就放棄

然後用了另一種方法 就是滑動答案的時候 讓題幹部分 fixed  如下面的程式碼

我會將上面頁面說成上層   穿透下面的頁面說成下層  記住方便閱讀


記住要用touchstart   用touchmove  和end  還會出現穿透的問題  在開始的時候直接將題幹定位fiexed

subjectiveList 是上層的頁面  這個裡面的body是我的下層頁面是body所以這麼寫  你需要根據你自己的情況對應著改一下 

這段程式碼就是滑動上層頁面的時候將下層頁面fixed  將top賦值下層頁面當前的scrolltop的值 為了儲存你之前滑動的位置

然後在你下層的定位fixed的dom節點上新增一個屬性儲存它的scrolltop的值 

因為你滑動下層的時候需要把原來的scrolltop還原  

 

這段是滑動下層頁面的時候講下層定位以及scrolltop還原 

到這基本就解決了    然而並沒有!!!!!!

這個方法在安卓上完美解決但是  在ios上會出現各種神奇的bug  滑動頁面亂跳 會讓你懷疑人生  然後就有了第二種方法的探尋之路  

第二種方法思路  我們上層頁面滑動到底部或者頂部的時候  才會影響到 下層的頁面  所以就有了想法  如果滑動到最底部 就阻止上層頁面的預設事件  下層就不會動了  但是有了阻止預設事件上層頁面也劃不動  


這個方法都是操作上層頁面 不用去理會下層頁面 

touchstart不用去看這個是我解決別的問題

在touchmove的時候看是否為最上端或者最底端

scrolltop==0的時候是最上端

阻止預設事件  因為阻止預設事件之後就滑動不了  所以滑動結束之後給scrolltop賦值了個1  為了下次滑動時候還能繼續滑動 而且賦值個1 不會影響使用 看不出來  

$(".subjectiveList").scrollTop() + $(".subjectiveList").height() >= $(".subjectiveList")[0].scrollHeight  這個是判斷是不是最下端然後將scrolltop減1 也是為了防止下次滑不動

這個方法ios完美執行 但是安卓滑動上層的時候下層會閃動!!!!!!

所以綜合以上兩種方法 總結了一個兩種結合的方法


先判斷手機的機型是什麼 然後進入對應的程式碼 

純原創第一次寫如果解決你的問題請給個贊  大笑大笑