From 7f53920598db083455408ae73e99e058695bcf95 Mon Sep 17 00:00:00 2001 From: Alexander Skvortsov <38059171+askvortsov1@users.noreply.github.com> Date: Wed, 17 Feb 2021 10:36:30 -0500 Subject: [PATCH] Various iOS scroll improvements (#2548) * Don't update scrubber while post pages loading This alleviates the scrubber bouncing around when scrolling up on iOS * Throttle loadMore loadPrevious Throttle loadMore and loadPrevious functions to alleviate skipping over pages and pages of posts during one scroll. This sometimes happens on iOS --- framework/core/js/src/forum/components/PostStream.js | 4 +--- framework/core/js/src/forum/states/PostStreamState.js | 8 ++++++-- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/framework/core/js/src/forum/components/PostStream.js b/framework/core/js/src/forum/components/PostStream.js index c121b37ca..cf5a43d1c 100644 --- a/framework/core/js/src/forum/components/PostStream.js +++ b/framework/core/js/src/forum/components/PostStream.js @@ -146,12 +146,10 @@ export default class PostStream extends Component { * @param {Integer} top */ onscroll(top = window.pageYOffset) { - if (this.stream.paused) return; + if (this.stream.paused || this.stream.pagesLoading) return; this.updateScrubber(top); - if (this.stream.pagesLoading) return; - this.loadPostsIfNeeded(top); // Throttle calculation of our position (start/end numbers of posts in the diff --git a/framework/core/js/src/forum/states/PostStreamState.js b/framework/core/js/src/forum/states/PostStreamState.js index 1adf6b293..b93ec9143 100644 --- a/framework/core/js/src/forum/states/PostStreamState.js +++ b/framework/core/js/src/forum/states/PostStreamState.js @@ -1,3 +1,4 @@ +import { throttle } from 'lodash-es'; import anchorScroll from '../../common/utils/anchorScroll'; class PostStreamState { @@ -49,6 +50,9 @@ class PostStreamState { */ this.forceUpdateScrubber = false; + this.loadNext = throttle(this._loadNext, 300); + this.loadPrevious = throttle(this._loadPrevious, 300); + this.show(includedPosts); } @@ -187,7 +191,7 @@ class PostStreamState { /** * Load the next page of posts. */ - loadNext() { + _loadNext() { const start = this.visibleEnd; const end = (this.visibleEnd = this.sanitizeIndex(this.visibleEnd + this.constructor.loadCount)); @@ -210,7 +214,7 @@ class PostStreamState { /** * Load the previous page of posts. */ - loadPrevious() { + _loadPrevious() { const end = this.visibleStart; const start = (this.visibleStart = this.sanitizeIndex(this.visibleStart - this.constructor.loadCount));