fix(StudyCoursePage): 调整页面滚动和高度计算的延迟逻辑
为了解决页面滚动和高度计算时可能出现的布局未完全渲染的问题,增加了 setTimeout 延迟逻辑,并调整了滚动偏移量,确保滚动定位准确
Showing
1 changed file
with
28 additions
and
23 deletions
| ... | @@ -139,20 +139,22 @@ const tabRefs = ref([]); | ... | @@ -139,20 +139,22 @@ const tabRefs = ref([]); |
| 139 | 139 | ||
| 140 | // 计算topWrapperHeight的函数 | 140 | // 计算topWrapperHeight的函数 |
| 141 | const updateTopWrapperHeight = () => { | 141 | const updateTopWrapperHeight = () => { |
| 142 | - nextTick(() => { | 142 | + setTimeout(() => { |
| 143 | - const topWrapper = document.querySelector('.top-wrapper'); | 143 | + nextTick(() => { |
| 144 | - if (topWrapper) { | 144 | + const topWrapper = document.querySelector('.top-wrapper'); |
| 145 | - // 断开之前的observer连接 | 145 | + if (topWrapper) { |
| 146 | - if (resizeObserver.value) { | 146 | + // 断开之前的observer连接 |
| 147 | - resizeObserver.value.disconnect(); | 147 | + if (resizeObserver.value) { |
| 148 | + resizeObserver.value.disconnect(); | ||
| 149 | + } | ||
| 150 | + // 使用 ResizeObserver 监听元素尺寸变化 | ||
| 151 | + resizeObserver.value = new ResizeObserver(() => { | ||
| 152 | + topWrapperHeight.value = `${topWrapper.offsetHeight}px`; | ||
| 153 | + }); | ||
| 154 | + resizeObserver.value.observe(topWrapper); | ||
| 148 | } | 155 | } |
| 149 | - // 使用 ResizeObserver 监听元素尺寸变化 | 156 | + }); |
| 150 | - resizeObserver.value = new ResizeObserver(() => { | 157 | + }, 500) |
| 151 | - topWrapperHeight.value = `${topWrapper.offsetHeight}px`; | ||
| 152 | - }); | ||
| 153 | - resizeObserver.value.observe(topWrapper); | ||
| 154 | - } | ||
| 155 | - }); | ||
| 156 | }; | 158 | }; |
| 157 | 159 | ||
| 158 | const course = ref([]); | 160 | const course = ref([]); |
| ... | @@ -251,16 +253,19 @@ const getTransitionTiming = (current, previous) => { | ... | @@ -251,16 +253,19 @@ const getTransitionTiming = (current, previous) => { |
| 251 | // 修改handleTabChange函数 | 253 | // 修改handleTabChange函数 |
| 252 | const handleTabChange = (name) => { | 254 | const handleTabChange = (name) => { |
| 253 | previousTab.value = activeTab.value; | 255 | previousTab.value = activeTab.value; |
| 254 | - nextTick(() => { | 256 | + let offset = 100; // 调整偏移量, 配合目录的高度 |
| 255 | - const element = document.getElementById(name); | 257 | + setTimeout(() => { |
| 256 | - if (element) { | 258 | + nextTick(() => { |
| 257 | - const topOffset = element.offsetTop - parseInt(topWrapperHeight.value); | 259 | + const element = document.getElementById(name); |
| 258 | - window.scrollTo({ | 260 | + if (element) { |
| 259 | - top: topOffset, | 261 | + const topOffset = element.offsetTop - offset - parseInt(topWrapperHeight.value); |
| 260 | - behavior: 'smooth' | 262 | + window.scrollTo({ |
| 261 | - }); | 263 | + top: topOffset, |
| 262 | - } | 264 | + behavior: 'smooth' |
| 263 | - }); | 265 | + }); |
| 266 | + } | ||
| 267 | + }); | ||
| 268 | + }, 100); | ||
| 264 | }; | 269 | }; |
| 265 | 270 | ||
| 266 | // 课程数据 | 271 | // 课程数据 | ... | ... |
-
Please register or login to post a comment