在我的网页上,我有一个溢出的div(即垂直滚动条)。在div里面,我有ids的锚点。当我在URL(mypage.html#id)中放入其中一个ID时,我希望div而不是页面滚动到该锚点。
我如何做到这一点,最好是使用纯JavaScript?如果它太复杂了,我将使用jQuery,但我不会在这个项目中使用它来做任何事情。
答案 0 :(得分:8)
$('.overflow').scrollTop($('#anchor').offset().top);
没有任何理由你无法将其转换为标准的javascript。
请注意,如果锚元素上有边距,则滚动将关闭。
答案 1 :(得分:5)
您是否尝试在锚点上设置focus()
?
任何带有tabindex的DOM元素都是可聚焦的,任何具有焦点的元素都将被浏览器滚动到视图中。
答案 2 :(得分:1)
这是纯Javascript(ECMA 6)解决方案,类似于Ariel的答案。
const overflow = document.querySelector('.overflow');
const anchor = document.getElementById('anchor');
// Get the bounding client rectangles for both
// the overflow container and the target anchor
const rectOverflow = overflow.getBoundingClientRect();
const rectAnchor = anchor.getBoundingClientRect();
// Set the scroll position of the overflow container
overflow.scrollTop = rectAnchor.top - rectOverflow.top;
答案 3 :(得分:0)
对于 2021 年几乎所有主流浏览器的用户,请使用 element.scrollIntoView()
。
https://developer.mozilla.org/docs/Web/API/Element/scrollIntoView
<块引用>Element 接口的 scrollIntoView() 方法滚动元素的 父容器,使得 scrollIntoView() 所在的元素 调用对用户可见 - MDN 网络文档
示例:
var myEl = document.getElementById("child");
myEl.scrollIntoView()
或使用 Parameters -- Safari 或 Internet Explorer 不支持:
myEl.scrollIntoView({
block: "center" // Start, center, end, or nearest. Defaults to start.
behavior: "smooth"
})