From 418a31ce6dd35e9169a9605dd4010c539b6a3b5a Mon Sep 17 00:00:00 2001 From: kerms Date: Sat, 15 Jun 2024 16:40:38 +0800 Subject: [PATCH] fix(UX) auto scroll not working when refresh filteredData --- src/views/text-data-viewer/textDataViewer.vue | 18 ++++++++---------- 1 file changed, 8 insertions(+), 10 deletions(-) diff --git a/src/views/text-data-viewer/textDataViewer.vue b/src/views/text-data-viewer/textDataViewer.vue index cd4538e..10e9c8a 100644 --- a/src/views/text-data-viewer/textDataViewer.vue +++ b/src/views/text-data-viewer/textDataViewer.vue @@ -291,6 +291,10 @@ function attachScroll() { const config = {childList: true, subtree: true, attributes: true}; mutationObserver.observe(vuetifyVirtualScrollBarRef.value, config) } + + if (store.forceToBottom) { + scrollToBottom(); + } } onMounted(() => { @@ -343,13 +347,6 @@ function scrollToBottom() { }); } -function scrollToTop() { - nextTick(() => { - vuetifyVirtualScrollBarRef.value.scrollTop = vuetifyVirtualScrollBarRef.value.scrollHeight; - // vuetifyVirtualScrollBarRef.value.scrollTo(0, 0); - }); -} - function formatHexInput(input: string) { // Split the input string on spaces to process each segment separately let str; @@ -423,11 +420,10 @@ watch(loopSendFreq, (value) => { /* patch scroll container does not update clear filter */ watch(() => store.filterChanged, (value) => { - if (value) { - scrollToTop() + if (value && store.forceToBottom) { scrollToBottom(); - store.filterChanged = false; } + store.filterChanged = false; }) watch(() => store.RxRemainHexdump, value => { @@ -446,6 +442,8 @@ const handleScroll = (ev: Event) => { if (store.forceToBottom) { if (vuetifyVirtualScrollBarRef.value.scrollTop - lastScrollHeight < 0) { store.forceToBottom = false; + } else { + scrollToBottom(); } } else if ((vuetifyVirtualScrollBarRef.value.scrollHeight - vuetifyVirtualScrollBarRef.value.scrollTop) <= vuetifyVirtualScrollBarRef.value.clientHeight) {