scrollIntoView返回顶部失效问题

背景:

在vue项目中进入页面使用了 scrollIntoView 方法让页面滚动回顶部,同样的详情页面发现有的可以返回顶部,但是有的失效。

代码如下:

import { onBeforeRouteUpdate } from "vue-router";
onBeforeRouteUpdate((to, from) => {
setTimeout(() => {
document.getElementById("main").scrollIntoView({
behavior: "smooth",
block: "start",
});
}, 300);
});

解决:

在经过对比排查之后,发现失效的页面获取数据的接口响应时间超出了300ms,即上面设置的定时器的时间。猜测是因为数据没渲染好便执行了 scrollIntoView 方法,导致滚动失效。把定时器事件改为500ms后问题得到解决。也可以在保证数据渲染完毕后再执行该方法。

一些已知的 scrollIntoView 生效的前提条件:

  1. 元素的 CSS 属性 overflow 必须设置为 scroll 或 auto,或者其父级元素的 overflow 属性设置为 scroll 或 auto,以确保滚动条可见。
  2. 元素的高度不能为0,且必须大于容器的高度,否则无需滚动。
  3. 元素的 display 属性不能设置为 none,visibility属性不能为hidden,否则元素将不可见且无法滚动。
  4. scrollIntoView 方法必须在已经完成页面的加载和渲染之后调用,否则可能无法正确滚动到指定的元素。
posted @   Li_pk  阅读(1041)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· Vue3状态管理终极指南:Pinia保姆级教程
点击右上角即可分享
微信分享提示