1. 程式人生 > >scrollingElement:在微信內建瀏覽器中的坑

scrollingElement:在微信內建瀏覽器中的坑

最近在做頁面儲存狀態時,由詳情頁跳轉回列表頁,恢復狀態時,有很明顯的等待時間。當初以為是恢復資料時,由於又去請求的資料造成的,結果是一個由“載入更多”的功能帶來的坑。

“載入更多”的實現效果為:當頁面滑動時,元素視口高度+元素滾動高度+70(只是為了多一部分空間)>=元素滾動高度時,就載入下一頁的資料。

在PC端一切表現的那麼完美,後面測試手機自帶瀏覽器也很快,就唯獨在微信內建瀏覽器中開啟有很明顯的等待時間。

在微信開發者工具中,檢測到這樣一個問題,就是隻要一滑動,資料就去請求下一頁。如果資料分了20頁,那我滑動20下,等跳轉回列表頁時,我需要去迴圈請求20頁的資料,然後再恢復頁面位置。這樣,勢必恢復狀態很慢。

最後查到了是由於scrollingElement獲取錯誤的原因,看以下程式碼:

window.addEventListener('scroll', function(event) {
    var eleScrolling;
    if (eleScrolling = event.target.scrollingElement) {
        if (scope.toggleSpy) {
            if (scope.onbottom && angular.isFunction(scope.onbottom)) {
                if (eleScrolling.clientHeight + eleScrolling.scrollTop + parseInt(scope.offset) >= eleScrolling.scrollHeight) {
                    scope.$apply(function() {
                        scope.toggleSpy = false;
                        scope.onbottom();
                    });
                }
            }
        }
    }
});

scrollingElement:在標準模式下, 這是文件的根元素, document.documentElement;在怪異模式下,是獲取的body或者null。

所以,在微信內建瀏覽器中,除錯發現,獲取的真的是body。

在我的程式碼中,body的client就是它的scrollHeight,因此只要一滾動,高度總是大於的,就總會去請求下一頁,直到請求完資料。

記錄一下這個坑,防止以後踩踏。