diff --git a/client/components/Reader/RecentBooksPage/RecentBooksPage.vue b/client/components/Reader/RecentBooksPage/RecentBooksPage.vue index 51812a86..7f3b13c7 100644 --- a/client/components/Reader/RecentBooksPage/RecentBooksPage.vue +++ b/client/components/Reader/RecentBooksPage/RecentBooksPage.vue @@ -15,6 +15,10 @@ + + + + { + this.showBar(); + await this.updateTableData(); + await this.scrollToActiveBook(); + })(); } loadSettings() { @@ -474,10 +481,21 @@ class RecentBooksPage { return false; } + showBar() { + this.lastScrollTop1 = this.$refs.vsContainer.scrollTop; + this.$refs.header.style.position = 'sticky'; + this.$refs.header.style.top = 0; + } + onScroll() { const curScrollTop = this.$refs.vsContainer.scrollTop; - if (curScrollTop - this.lastScrollTop1 > 150) { + if (this.lockScroll) { + this.lastScrollTop1 = curScrollTop; + return; + } + + if (curScrollTop - this.lastScrollTop1 > 100) { this.$refs.header.style.top = `-${this.$refs.header.offsetHeight}px`; this.$refs.header.style.transition = 'top 0.2s ease 0s'; @@ -503,24 +521,28 @@ class RecentBooksPage { } async scrollToActiveBook() { - await this.$nextTick(); - - let activeIndex = -1; - let activeParentIndex = -1; - for (let i = 0; i < this.tableData.length; i++) { - const book = this.tableData[i]; - if (book.active) - activeIndex = i; - if (book.activeParent) - activeParentIndex = i; + this.lockScroll = true; + try { + let activeIndex = -1; + let activeParentIndex = -1; + for (let i = 0; i < this.tableData.length; i++) { + const book = this.tableData[i]; + if (book.active) + activeIndex = i; + if (book.activeParent) + activeParentIndex = i; - if (activeIndex >= 0 && activeParentIndex >= 0) - break; - } + if (activeIndex >= 0 && activeParentIndex >= 0) + break; + } - const index = (activeIndex >= 0 ? activeIndex : activeParentIndex); - if (index >= 0) { - this.$refs.virtualScroll.scrollTo(index, 'center'); + const index = (activeIndex >= 0 ? activeIndex : activeParentIndex); + if (index >= 0) { + this.$refs.virtualScroll.scrollTo(index, 'center'); + } + } finally { + await utils.sleep(100); + this.lockScroll = false; } }