diff --git a/src/components/PomodoroTimer.vue b/src/components/PomodoroTimer.vue index 415ccfa..7279697 100644 --- a/src/components/PomodoroTimer.vue +++ b/src/components/PomodoroTimer.vue @@ -34,7 +34,7 @@ -
+
{{ statusText }} @@ -231,8 +231,29 @@ const onUIMouseEnter = () => { setHoveringUI(true) } const onUIMouseLeave = () => { setHoveringUI(false) } const onUITouchStart = () => { setHoveringUI(true) } const onUITouchEnd = () => { setHoveringUI(false) } + +// settings-content的scrolling bar控制 +const settingsContentRef = ref(null) +let removeScrollListener = null +const setupScrollDetection = () => { + const contentElement = settingsContentRef.value + let timer = null + const handleScroll = () => { clearTimeout(timer); contentElement.classList.add('scrolling'); timer = setTimeout(() => contentElement.classList.remove('scrolling'), 350) } + contentElement.addEventListener('scroll', handleScroll) + return () => { contentElement.removeEventListener('scroll', handleScroll); clearTimeout(timer) } +} +// 事件监听器的生命周期 +watch(showSettings, (newVal) => { + if (newVal) { setTimeout(() => { if (removeScrollListener) removeScrollListener(); removeScrollListener = setupScrollDetection() }, 200) } + else if (removeScrollListener) { removeScrollListener(); removeScrollListener = null } +}) + onMounted(() => { if ('Notification' in window && Notification.permission === 'default') Notification.requestPermission(); timeInterval = setInterval(() => { currentTime.value = new Date() }, 1000) }) -onUnmounted(() => { if (timer) clearInterval(timer); if (timeInterval) clearInterval(timeInterval) }) +onUnmounted(() => { + if (timer) clearInterval(timer) + if (timeInterval) clearInterval(timeInterval) + if (removeScrollListener) removeScrollListener() +})