jQuery jQuery滚动到页面部分
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/15991356/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
jQuery Scroll To Section of Page
提问by Brian
I'm trying to build a new trendy one page website where I scroll to a section on the page. I want to bring the "fixed" header to exactly where the content is. I am using the Zurb Foundation. This is what I have so far (some of the code found here):
我正在尝试建立一个新的时尚单页网站,我可以在其中滚动到页面上的某个部分。我想将“固定”标题带到内容所在的位置。我正在使用 Zurb 基金会。这是我到目前为止所拥有的(一些代码在这里找到):
<li><%= link_to "Recent Work", "#", "data-scroll" => "recent" %></li>
$(document).ready(function() {
$("a[data-scroll]").click(function() {
var id = $(this).data("scroll")
$('html,body').animate({
scrollTop: $("#"+id).offset().top},
'slow');
});
});
<div id="recent">some content</div>
Problem I have is stated above. I want to bring my fixed header to exactly where this div is placed on the page. Please advise.
我遇到的问题如上所述。我想将我的固定标题准确放置在页面上此 div 的位置。请指教。
回答by cereallarceny
If you need to offset the "roll your own" solution then try the following:
如果您需要抵消“自己动手”的解决方案,请尝试以下操作:
$("#button").click(function() {
var offset = 20; //Offset of 20px
$('html, body').animate({
scrollTop: $("#elementtoScrollToID").offset().top + offset
}, 2000);
});
回答by Mark
Over 5 years since this question was asked and answered, and things have changed a bit. Most people will probably be using Javascript frameworks like Angular or React now, but for those who are not (like myself, working on some older legacy projects), I have made some alterations on cereallarceny's answer.
自从提出并回答这个问题 5 年多以来,事情发生了一些变化。大多数人现在可能会使用 Angular 或 React 等 Javascript 框架,但对于那些没有使用的人(比如我,从事一些较旧的遗留项目),我对谷物盗窃的回答做了一些改动。
This solution allows for scrolling on any element, not just the body, and takes into account any scrolling already made on the element.
此解决方案允许在任何元素上滚动,而不仅仅是主体,并考虑到任何已经在元素上进行的滚动。
$("#button").click(function() {
// Find the element that you are scrolling (commonly body, but doesn't need to be!)
var scrollingElement = $('#scrollingElement');
// Find the element that you want to scroll to.
var targetElement = $("#targetElement");
// Stop any current animations (prevents a backlog of scroll animations for trigger-happy end-users)
scrollingElement.stop();
// Define the scrolling animation...
scrollingElement.animate({
scrollTop:
// The distance in pixels from the top of the page to the top of the target element.
targetElement.offset().top
// The distance in pixels from the top of the page to the top of the scrolling element.
- scrollingElement.offset().top
// So far, the above two offsets determine how far down the scrolling element the target actually is...
// The distance in pixels the scrolling element has ALREADY been scrolled.
+ scrollingElement.scrollTop()
// SUCCESS! This will now take us to the target element.
// OPTIONAL PART - SCROLLING OFFSET (for prettiness :])
// This will change based on how you set up your page. Here are some examples...
// To allow for a margin above your target...
- parseFloat(targetElement.css("margin-top"))
// To allow for padding from a parent element (in this case the scrolling element)...
- parseFloat(scrollingElement.css("padding-top"))
// If all else fails, you can always specify your own amount (in pixels)...
- 20
},
200); // Duration in milliseconds of the scroll animation
});
Live Example
现场示例
var listItem = $("li")
listItem.on("click", function() {
var scrollingElement = $('#scrollingElement');
var targetElement = $(this.dataset.link);
scrollingElement.stop();
scrollingElement.animate({
scrollTop: targetElement.offset().top -
scrollingElement.offset().top +
scrollingElement.scrollTop() -
parseFloat(targetElement.css("margin-top"))
}, 200);
})
html,
body {
background: #FFF;
height: 100%;
margin: 0;
}
li {
cursor: pointer;
list-style: none;
margin: 10px;
}
li:hover {
color: blue;
}
#links {
border: solid 1px black;
float: left;
height: 90%;
margin: 3%;
width: 20%;
}
#scrollingElement {
border: solid 1px black;
float: left;
height: 90%;
margin: 3%;
overflow: auto;
width: 60%;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<html>
<body>
<div id="links">
<ul>
<li data-link="#head1">Heading 1</li>
<li data-link="#head2">Heading 2</li>
<li data-link="#head3">Heading 3</li>
<li data-link="#head4">Heading 4</li>
<li data-link="#head5">Heading 5</li>
</ul>
</div>
<div id="scrollingElement">
<h1 id="head1">Heading 1</h1>
<p>
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Praesent sed justo interdum, tincidunt felis a, condimentum est. Donec pulvinar tincidunt orci, vitae aliquet diam luctus sit amet. Class aptent taciti sociosqu ad litora torquent per conubia nostra,
per inceptos himenaeos. Praesent varius cursus lorem, ultrices porta erat vehicula sed. Donec blandit venenatis laoreet. Morbi venenatis hendrerit suscipit. Pellentesque justo velit, ultricies id orci et, viverra fermentum nibh. Nulla vitae interdum
tellus. Duis bibendum maximus mauris ac condimentum. Phasellus convallis ligula ligula, sed tempor quam varius ac. Etiam dignissim arcu sed nibh facilisis, eu rutrum elit pharetra. Suspendisse dignissim commodo eros, rutrum volutpat orci mollis
quis. Donec vulputate, tortor eget viverra sodales, ex libero euismod sapien, dignissim interdum neque urna non orci. Fusce eget ex iaculis, aliquam tortor sit amet, congue velit. Curabitur eget pretium odio. Phasellus dapibus, sapien ut tempor
dapibus, mauris felis venenatis magna, in posuere metus nulla in justo. Nam accumsan finibus libero ut gravida. Duis orci dolor, vulputate ut quam sit amet, egestas porttitor diam. Pellentesque habitant morbi tristique senectus et netus et malesuada
fames ac turpis egestas. Proin ultricies sapien eu dignissim lacinia. Donec ut porta metus. Pellentesque ultrices gravida auctor. Quisque nulla risus, ornare eu molestie at, dapibus vitae tortor. Nullam consequat libero in libero sollicitudin, in
luctus ante semper. In hac habitasse platea dictumst. Sed ultricies mattis ex, ac feugiat diam pharetra vitae. Vestibulum malesuada pulvinar sem vitae commodo. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos.
Cras porta gravida mollis. Aliquam mollis mi ac nisl fermentum elementum. Morbi vestibulum efficitur dolor ut consectetur.
</p>
<h1 id="head2">Heading 2</h1>
<p>
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Praesent sed justo interdum, tincidunt felis a, condimentum est. Donec pulvinar tincidunt orci, vitae aliquet diam luctus sit amet. Class aptent taciti sociosqu ad litora torquent per conubia nostra,
per inceptos himenaeos. Praesent varius cursus lorem, ultrices porta erat vehicula sed. Donec blandit venenatis laoreet. Morbi venenatis hendrerit suscipit. Pellentesque justo velit, ultricies id orci et, viverra fermentum nibh. Nulla vitae interdum
tellus. Duis bibendum maximus mauris ac condimentum. Phasellus convallis ligula ligula, sed tempor quam varius ac. Etiam dignissim arcu sed nibh facilisis, eu rutrum elit pharetra. Suspendisse dignissim commodo eros, rutrum volutpat orci mollis
quis. Donec vulputate, tortor eget viverra sodales, ex libero euismod sapien, dignissim interdum neque urna non orci. Fusce eget ex iaculis, aliquam tortor sit amet, congue velit. Curabitur eget pretium odio. Phasellus dapibus, sapien ut tempor
dapibus, mauris felis venenatis magna, in posuere metus nulla in justo. Nam accumsan finibus libero ut gravida. Duis orci dolor, vulputate ut quam sit amet, egestas porttitor diam. Pellentesque habitant morbi tristique senectus et netus et malesuada
fames ac turpis egestas. Proin ultricies sapien eu dignissim lacinia. Donec ut porta metus. Pellentesque ultrices gravida auctor. Quisque nulla risus, ornare eu molestie at, dapibus vitae tortor. Nullam consequat libero in libero sollicitudin, in
luctus ante semper. In hac habitasse platea dictumst. Sed ultricies mattis ex, ac feugiat diam pharetra vitae. Vestibulum malesuada pulvinar sem vitae commodo. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos.
Cras porta gravida mollis. Aliquam mollis mi ac nisl fermentum elementum. Morbi vestibulum efficitur dolor ut consectetur.
</p>
<h1 id="head3">Heading 3</h1>
<p>
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Praesent sed justo interdum, tincidunt felis a, condimentum est. Donec pulvinar tincidunt orci, vitae aliquet diam luctus sit amet. Class aptent taciti sociosqu ad litora torquent per conubia nostra,
per inceptos himenaeos. Praesent varius cursus lorem, ultrices porta erat vehicula sed. Donec blandit venenatis laoreet. Morbi venenatis hendrerit suscipit. Pellentesque justo velit, ultricies id orci et, viverra fermentum nibh. Nulla vitae interdum
tellus. Duis bibendum maximus mauris ac condimentum. Phasellus convallis ligula ligula, sed tempor quam varius ac. Etiam dignissim arcu sed nibh facilisis, eu rutrum elit pharetra. Suspendisse dignissim commodo eros, rutrum volutpat orci mollis
quis. Donec vulputate, tortor eget viverra sodales, ex libero euismod sapien, dignissim interdum neque urna non orci. Fusce eget ex iaculis, aliquam tortor sit amet, congue velit. Curabitur eget pretium odio. Phasellus dapibus, sapien ut tempor
dapibus, mauris felis venenatis magna, in posuere metus nulla in justo. Nam accumsan finibus libero ut gravida. Duis orci dolor, vulputate ut quam sit amet, egestas porttitor diam. Pellentesque habitant morbi tristique senectus et netus et malesuada
fames ac turpis egestas. Proin ultricies sapien eu dignissim lacinia. Donec ut porta metus. Pellentesque ultrices gravida auctor. Quisque nulla risus, ornare eu molestie at, dapibus vitae tortor. Nullam consequat libero in libero sollicitudin, in
luctus ante semper. In hac habitasse platea dictumst. Sed ultricies mattis ex, ac feugiat diam pharetra vitae. Vestibulum malesuada pulvinar sem vitae commodo. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos.
Cras porta gravida mollis. Aliquam mollis mi ac nisl fermentum elementum. Morbi vestibulum efficitur dolor ut consectetur.
</p>
<h1 id="head4">Heading 4</h1>
<p>
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Praesent sed justo interdum, tincidunt felis a, condimentum est. Donec pulvinar tincidunt orci, vitae aliquet diam luctus sit amet. Class aptent taciti sociosqu ad litora torquent per conubia nostra,
per inceptos himenaeos. Praesent varius cursus lorem, ultrices porta erat vehicula sed. Donec blandit venenatis laoreet. Morbi venenatis hendrerit suscipit. Pellentesque justo velit, ultricies id orci et, viverra fermentum nibh. Nulla vitae interdum
tellus. Duis bibendum maximus mauris ac condimentum. Phasellus convallis ligula ligula, sed tempor quam varius ac. Etiam dignissim arcu sed nibh facilisis, eu rutrum elit pharetra. Suspendisse dignissim commodo eros, rutrum volutpat orci mollis
quis. Donec vulputate, tortor eget viverra sodales, ex libero euismod sapien, dignissim interdum neque urna non orci. Fusce eget ex iaculis, aliquam tortor sit amet, congue velit. Curabitur eget pretium odio. Phasellus dapibus, sapien ut tempor
dapibus, mauris felis venenatis magna, in posuere metus nulla in justo. Nam accumsan finibus libero ut gravida. Duis orci dolor, vulputate ut quam sit amet, egestas porttitor diam. Pellentesque habitant morbi tristique senectus et netus et malesuada
fames ac turpis egestas. Proin ultricies sapien eu dignissim lacinia. Donec ut porta metus. Pellentesque ultrices gravida auctor. Quisque nulla risus, ornare eu molestie at, dapibus vitae tortor. Nullam consequat libero in libero sollicitudin, in
luctus ante semper. In hac habitasse platea dictumst. Sed ultricies mattis ex, ac feugiat diam pharetra vitae. Vestibulum malesuada pulvinar sem vitae commodo. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos.
Cras porta gravida mollis. Aliquam mollis mi ac nisl fermentum elementum. Morbi vestibulum efficitur dolor ut consectetur.
</p>
<h1 id="head5">Heading 5</h1>
<p>
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Praesent sed justo interdum, tincidunt felis a, condimentum est. Donec pulvinar tincidunt orci, vitae aliquet diam luctus sit amet. Class aptent taciti sociosqu ad litora torquent per conubia nostra,
per inceptos himenaeos. Praesent varius cursus lorem, ultrices porta erat vehicula sed. Donec blandit venenatis laoreet. Morbi venenatis hendrerit suscipit. Pellentesque justo velit, ultricies id orci et, viverra fermentum nibh. Nulla vitae interdum
tellus. Duis bibendum maximus mauris ac condimentum. Phasellus convallis ligula ligula, sed tempor quam varius ac. Etiam dignissim arcu sed nibh facilisis, eu rutrum elit pharetra. Suspendisse dignissim commodo eros, rutrum volutpat orci mollis
quis. Donec vulputate, tortor eget viverra sodales, ex libero euismod sapien, dignissim interdum neque urna non orci. Fusce eget ex iaculis, aliquam tortor sit amet, congue velit. Curabitur eget pretium odio. Phasellus dapibus, sapien ut tempor
dapibus, mauris felis venenatis magna, in posuere metus nulla in justo. Nam accumsan finibus libero ut gravida. Duis orci dolor, vulputate ut quam sit amet, egestas porttitor diam. Pellentesque habitant morbi tristique senectus et netus et malesuada
fames ac turpis egestas. Proin ultricies sapien eu dignissim lacinia. Donec ut porta metus. Pellentesque ultrices gravida auctor. Quisque nulla risus, ornare eu molestie at, dapibus vitae tortor. Nullam consequat libero in libero sollicitudin, in
luctus ante semper. In hac habitasse platea dictumst. Sed ultricies mattis ex, ac feugiat diam pharetra vitae. Vestibulum malesuada pulvinar sem vitae commodo. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos.
Cras porta gravida mollis. Aliquam mollis mi ac nisl fermentum elementum. Morbi vestibulum efficitur dolor ut consectetur.
</p>
</div>
</body>
</html>