微信瀏覽器 -webkit-overflow-scrolling 彈性滾動出現黑色背景,與ios彈性滾動沖突問題


微信瀏覽器在為scroll元素設置 -webkit-overflow-scrolling 時會使用ios彈性滾動特性。微信本身有黑色區域的彈性滑動。

在android下沒什么問題,但是在ios下兩者會產生沖突。

解決方法:

方法1. 網上流傳最廣的思路是設置touchmove的事件中preventDefault;但是這個方法有個問題是把ios的彈性滾動一並禁用掉了。

方法2:

  發現微信的彈性滾動觸發機制是 手指按下時並且此時scroll觸頂(底),根據這個特性解決辦法代碼:

let scrollEle = document.body;
scrollEle.addEventListener('touchstart', (evt) => {
    // 修復微信的黑色彈性滾動與ios沖突問題
    let scrollTop = scrollEle.scrollTop;
    let scrollHeight = scrollEle.scrollHeight;
    let height = scrollEle.offsetHeight;
    let scrollTopTo;

    // 頂部
    scrollTopTo = Math.max(scrollTop, 1);

    // 底部
    if(scrollTopTo === scrollHeight - height) {
      scrollTopTo--;
    }

    if(scrollTop != scrollTopTo) {
      scrollEle.scrollTop = scrollTopTo;
    }
});

原理:因為微信的彈性觸發機制是手指按下時,scroll元素是否觸頂。因此為了避免觸發此特性,當手指按下時將scroll元素上移1px,這樣就無法觸發微信的彈性滾動,但是此時ios的彈性滾動依然生效。

底部的情況由於ios彈性滾動能夠使scrollTop超過可滾動距離,因此只判斷嚴格的觸底條件即可。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM