diff --git a/src/components/TaskList.vue b/src/components/TaskList.vue index d3ad37c..7a4b55b 100644 --- a/src/components/TaskList.vue +++ b/src/components/TaskList.vue @@ -313,14 +313,12 @@ const handleTaskListScroll = (event: Event) => { detail: { scrollTop }, }), ) -} - -// 处理Timeline垂直滚动同步 +}// 处理Timeline垂直滚动同步 const handleTimelineVerticalScroll = (event: CustomEvent) => { const { scrollTop } = event.detail const taskListBodyElement = document.querySelector('.task-list-body') as HTMLElement - if (taskListBodyElement && taskListBodyElement.scrollTop !== scrollTop) { - // 避免循环触发,只在scrollTop不同时才设置 + if (taskListBodyElement && Math.abs(taskListBodyElement.scrollTop - scrollTop) > 1) { + // 使用更精确的比较,避免1px以内的细微差异导致的循环触发 taskListBodyElement.scrollTop = scrollTop } } diff --git a/src/components/TaskRow.vue b/src/components/TaskRow.vue index 16b80e4..1525a34 100644 --- a/src/components/TaskRow.vue +++ b/src/components/TaskRow.vue @@ -518,7 +518,8 @@ onUnmounted(() => { .task-row { display: flex; border-bottom: 1px solid var(--gantt-border-light); - height: 50px; + height: 51px; /* 修改为51px,与Timeline中的task-row高度保持一致,包含border-bottom 1px */ + box-sizing: border-box; /* 确保border包含在高度计算中 */ background: var(--gantt-bg-primary); align-items: center; color: var(--gantt-text-secondary); diff --git a/src/components/Timeline.vue b/src/components/Timeline.vue index 7dee155..06d88d0 100644 --- a/src/components/Timeline.vue +++ b/src/components/Timeline.vue @@ -1543,8 +1543,8 @@ onMounted(() => { const handleTaskListVerticalScroll = (event: CustomEvent) => { const { scrollTop } = event.detail const timelineBody = document.querySelector('.timeline-body') as HTMLElement - if (timelineBody && timelineBody.scrollTop !== scrollTop) { - // 避免循环触发,只在scrollTop不同时才设置 + if (timelineBody && Math.abs(timelineBody.scrollTop - scrollTop) > 1) { + // 使用更精确的比较,避免1px以内的细微差异导致的循环触发 timelineBody.scrollTop = scrollTop } }