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 生效的前提条件:
- 元素的 CSS 属性 overflow 必须设置为 scroll 或 auto,或者其父级元素的 overflow 属性设置为 scroll 或 auto,以确保滚动条可见。
- 元素的高度不能为0,且必须大于容器的高度,否则无需滚动。
- 元素的 display 属性不能设置为 none,visibility属性不能为hidden,否则元素将不可见且无法滚动。
- scrollIntoView 方法必须在已经完成页面的加载和渲染之后调用,否则可能无法正确滚动到指定的元素。
标签:
JavaScript
, Vue3
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· Vue3状态管理终极指南:Pinia保姆级教程