携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第一天,点击查看活动详情.
问题引入
工作项目中用到了锚点定位,一开始用了a链接的锚点定位 结果出现了bug,我们的项目用的是哈希路由模式,所以#会被当做路由进行跳转,也就是在锚点链接进行跳转的时候,地址栏中的路径跟着发生了改变,由此导致在页面刷新后,因为并没有配置当前路由,就会跳到登录页.最后我找到了下面这种方法来解决这个bug,亲测有效.
代码实现
scrollIntoView
Element.scrollIntoView() 方法让当前的元素滚动到浏览器窗口的可视区域内。必须在页面容器可滚动时才能使用这个方法,不然无法触发此方法.
var element = document.getElementById("box");
element.scrollIntoView();
element.scrollIntoView(false);
element.scrollIntoView({block: "end"});
element.scrollIntoView({behavior: "smooth", block: "end", inline: "nearest"});
语法
element.scrollIntoView(); // 等同于 element.scrollIntoView(true)
element.scrollIntoView(alignToTop); // Boolean 型参数
element.scrollIntoView(scrollIntoViewOptions); // Object 型参数
参数
-
alignToTop可选一个
Boolean值:- 如果为
true,元素的顶端将和其所在滚动区的可视区域的顶端对齐。相应的scrollIntoViewOptions: {block: "start", inline: "nearest"}。这是这个参数的默认值。 - 如果为
false,元素的底端将和其所在滚动区的可视区域的底端对齐。相应的scrollIntoViewOptions: {block: "end", inline: "nearest"}。
- 如果为
-
scrollIntoViewOptions可选 -
一个包含下列属性的对象:
-
-
behavior可选定义动画过渡效果,
"auto"或"smooth"之一。默认为"auto"。 -
block可选定义垂直方向的对齐,
"start","center","end", 或"nearest"之一。默认为"start"。 -
inline可选定义水平方向的对齐,
"start","center","end", 或"nearest"之一。默认为"nearest"。
-
应用场景
- URL中hash标记的进化
- 聊天窗口滚动显示最新的消息
- 往一个列表添加item后滚动显示最新的添加的item
- 回到顶部(#)
- 滚动到指定位置(#xxx)
注意
取决于其它元素的布局情况,此元素可能不会完全滚动到顶端或底端。