hookehuyr

fix(StudyCoursePage): 调整页面滚动和高度计算的延迟逻辑

为了解决页面滚动和高度计算时可能出现的布局未完全渲染的问题,增加了 setTimeout 延迟逻辑,并调整了滚动偏移量,确保滚动定位准确
...@@ -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 // 课程数据
......