diff --git a/src/layouts/components/HeaderTab.vue b/src/layouts/components/HeaderTab.vue index 47b7d2b2..727374dc 100644 --- a/src/layouts/components/HeaderTab.vue +++ b/src/layouts/components/HeaderTab.vue @@ -33,6 +33,10 @@ const showTabsScrollIndicator = ref(false) const showLeftButton = ref(false) const showRightButton = ref(false) +// 滚动检测相关 +const scrollDistance = ref(0) +const showBlurBackground = ref(false) + // Function to scroll the tabs const scrollTabs = (direction: 'left' | 'right') => { const el = tabsContainerRef.value @@ -62,6 +66,13 @@ const updateTabsIndicator = () => { showRightButton.value = hasOverflow && !isScrolledToEnd } +// 滚动检测处理函数 +const handleScroll = () => { + scrollDistance.value = window.scrollY + // 当滚动距离大于10px时显示透明背景 + showBlurBackground.value = scrollDistance.value > 10 +} + // Debounce resize handler let resizeTimeout: ReturnType | null = null const handleResize = () => { @@ -74,9 +85,13 @@ const handleResize = () => { onMounted(async () => { // Add resize listener for tabs indicator window.addEventListener('resize', handleResize) + // Add scroll listener for blur background + window.addEventListener('scroll', handleScroll, { passive: true }) // Initial check for tabs indicator after DOM update await nextTick() // Ensure element is rendered updateTabsIndicator() + // Initial scroll check + handleScroll() // Listen for scroll events specifically on the tabs container tabsContainerRef.value?.addEventListener('scroll', updateTabsIndicator, { passive: true }) @@ -85,12 +100,14 @@ onMounted(async () => { onUnmounted(() => { // Remove resize listener window.removeEventListener('resize', handleResize) + // Remove scroll listener + window.removeEventListener('scroll', handleScroll) // Remove tabs scroll listener tabsContainerRef.value?.removeEventListener('scroll', updateTabsIndicator) })