scrollingElement:在微信內建瀏覽器中的坑
阿新 • • 發佈:2019-01-10
最近在做頁面儲存狀態時,由詳情頁跳轉回列表頁,恢復狀態時,有很明顯的等待時間。當初以為是恢復資料時,由於又去請求的資料造成的,結果是一個由“載入更多”的功能帶來的坑。
“載入更多”的實現效果為:當頁面滑動時,元素視口高度+元素滾動高度+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,因此只要一滾動,高度總是大於的,就總會去請求下一頁,直到請求完資料。
記錄一下這個坑,防止以後踩踏。