如何将 HTML 页面滚动到给定的锚点
我想让浏览器将页面滚动到给定的锚点,只需使用 JavaScript。
我已在 HTML 代码中指定了 name
或 id
属性:
<a name="anchorName">..</a>
或者
<h1 id="anchorName2">..</h1>
我希望获得与导航到 http 所获得的相同效果: //server.com/path#anchorName
。应滚动页面,以便锚点位于页面可见部分的顶部附近。
I’d like to make the browser to scroll the page to a given anchor, just by using JavaScript.
I have specified a name
or id
attribute in my HTML code:
<a name="anchorName">..</a>
or
<h1 id="anchorName2">..</h1>
I’d like to get the same effect as you’d get by navigating to http://server.com/path#anchorName
. The page should be scrolled so that the anchor is near the top of the visible part of the page.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(18)
根本不需要 jQuery!
No jQuery required at all!
方法更简单:
Way simpler:
您可以使用 jQuery 的 .animate()、.offset() 和
scrollTop
。示例链接:http://jsbin.com/unasi3/edit
如果您不想动画,使用 .scrollTop() ,例如:
或 JavaScript 的本机
location.hash
喜欢:You can use jQuery's .animate(), .offset() and
scrollTop
. LikeExample link: http://jsbin.com/unasi3/edit
If you don't want to animate, use .scrollTop() like:
Or JavaScript's native
location.hash
like:2018年至今纯JavaScript:
有一种非常方便的方式滚动到元素:
但据我了解,它没有像下面的选项那样好的支持。
了解有关该方法的更多信息。
如果需要该元素位于顶部:
CodePen 上的演示示例
如果您想要要位于中心的元素:
CodePen 上的演示示例
支持:
他们写道,
scroll
与scrollTo
的方法相同,但scrollTo
中的支持效果更好。有关该方法的更多信息。
2018-now Pure JavaScript:
There is a very convenient way to scroll to the element:
But as far as I understand, it does not have such good support as the options below.
Learn more about the method.
If it is necessary that the element is in the top:
Demonstration example on CodePen
If you want the element to be in the center:
Demonstration example on CodePen
Support:
They write that
scroll
is the same method asscrollTo
, but support shows better inscrollTo
.More about the method.
jAndy 的解决方案 ,但平滑滚动似乎在 Firefox 中出现问题。
这种方式在 Firefox 中也适用。
Great solution by jAndy, but the smooth scroll seems to be having issues working in Firefox.
Writing it this way works in Firefox as well.
让浏览器将页面滚动到给定锚点的最简单方法是在 style.css 文件中添加
*{scroll-behavior: smooth;}
和您的 HTML 导航使用#NameOfTheSection
。The easiest way to to make the browser to scroll the page to a given anchor is to add
*{scroll-behavior: smooth;}
in your style.css file and in your HTML navigation use#NameOfTheSection
.在 2018 年,你不需要 jQuery 来完成这样简单的事情。内置的
scrollIntoView()
方法支持“behavior
”属性以平滑滚动到页面上的任何元素。您甚至可以使用哈希值更新浏览器 URL,使其可添加书签。来自 有关滚动 HTML 书签的教程,这是一种本机方法自动为页面上的所有锚链接添加平滑滚动:
In 2018, you don't need jQuery for something simple like this. The built in
scrollIntoView()
method supports a "behavior
" property to smoothly scroll to any element on the page. You can even update the browser URL with a hash to make it bookmarkable.From this tutorial on scrolling HTML Bookmarks, here is a native way to add smooth scrolling to all anchor links on your page automatically:
这是一个没有 jQuery 的纯 JavaScript 解决方案。它已在 Chrome 和 Internet Explorer 上进行了测试,但未在 iOS 上进行了测试。
演示:https://jsfiddle.net/jd7q25hg/12/
Here is a pure JavaScript solution without jQuery. It was tested on Chrome and Internet Explorer, but not tested on iOS.
Demo: https://jsfiddle.net/jd7q25hg/12/
平滑滚动到正确位置
获取正确
y
坐标并使用window.scrollTo({top: y,behavior: 'smooth'})
Smoothly scroll to the proper position
Get correct
y
coordinate and usewindow.scrollTo({top: y, behavior: 'smooth'})
大多数答案都过于复杂。
如果您只想跳转到目标元素,则不需要JavaScript:
如果您想动画滚动到目标,请参考5hahiL的回答。
Most answers are unnecessarily complicated.
If you just want to jump to the target element, you don't need JavaScript:
If you want to scroll to the target animatedly, please refer to 5hahiL's answer.
CSS-Tricks 的解决方案在 jQuery 2.2.0 中不再有效。它会抛出选择器错误:
我通过更改选择器修复了它。完整的片段是这样的:
The solution from CSS-Tricks no longer works in jQuery 2.2.0. It will throw a selector error:
I fixed it by changing the selector. The full snippet is this:
这有效:
https://jsfiddle.net/68pnkfgd/
只需将“scroll”类添加到任何链接你想要动画
This works:
https://jsfiddle.net/68pnkfgd/
Just add the class 'scroll' to any links you wish to animate
这是一个可以将页面滚动到锚点的工作脚本。
要进行设置,只需为锚点链接提供一个与您要滚动到的锚点的名称属性相匹配的 id 即可。
This is a working script that will scroll the page to the anchor.
To set it up, just give the anchor link an id that matches the name attribute of the anchor that you want to scroll to.
我发现了一个简单的 CSS-Tricks 上的 jQuery 解决方案。我现在用的就是这个。
I found an easy and simple jQuery solution on CSS-Tricks. That's the one I'm using now.
Vue.js 2 解决方案...添加一个简单的数据属性来简单地强制更新:
A Vue.js 2 solution ... add a simple data property to simply force the update:
假设我们有一个 id 为“hero”的元素。页面上任意位置的按钮,其 ID 为“skip”。
在JS中:
Assume we have an element with id 'hero'. A button anywhere on the page with id 'skip'.
in JS: