From e3d9e736ad63ae5f019a609e2383e5a06a00a056 Mon Sep 17 00:00:00 2001 From: Cursor Agent Date: Sat, 5 Jul 2025 09:12:18 +0000 Subject: [PATCH] Add blur background effect on header tab when scrolling Co-authored-by: jxxghp --- src/layouts/components/HeaderTab.vue | 73 +++++++++++++++++++++++++++- 1 file changed, 72 insertions(+), 1 deletion(-) 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) })