diff --git a/packages/varlet-ui/src/index-bar/IndexBar.vue b/packages/varlet-ui/src/index-bar/IndexBar.vue index 3a6a32ec2f2..53ea75ed29f 100644 --- a/packages/varlet-ui/src/index-bar/IndexBar.vue +++ b/packages/varlet-ui/src/index-bar/IndexBar.vue @@ -73,10 +73,7 @@ export default defineComponent({ } ) - onSmartMounted(async () => { - await setScroller() - addScrollerListener() - }) + onSmartMounted(handleScroll) onBeforeUnmount(removeScrollerListener) @@ -116,6 +113,10 @@ export default defineComponent({ } function handleScroll() { + if (!scroller) { + setupScroller() + } + const scrollTop = getScrollTop(scroller!) const scrollHeight = scroller === window ? document.body.scrollHeight : (scroller as HTMLElement).scrollHeight const offsetTop = getOffsetTop() @@ -170,17 +171,17 @@ export default defineComponent({ clickedName.value = '' } - async function setScroller() { - await doubleRaf() + function setupScroller() { scroller = getParentScroller(barEl.value as HTMLElement) - } - - function addScrollerListener() { - scroller!.addEventListener('scroll', handleScroll) + scroller.addEventListener('scroll', handleScroll) } function removeScrollerListener() { - scroller!.removeEventListener('scroll', handleScroll) + if (!scroller) { + return + } + + scroller.removeEventListener('scroll', handleScroll) } // expose