我想让浏览器将页面滚动到给定的锚点,只需使用 JavaScript。
我在我的 HTML 代码中指定了一个name
orid
属性:
<a name="anchorName">..</a>
或者
<h1 id="anchorName2">..</h1>
我想获得与导航到http://server.com/path#anchorName
. 应该滚动页面,以便锚点靠近页面可见部分的顶部。
我想让浏览器将页面滚动到给定的锚点,只需使用 JavaScript。
我在我的 HTML 代码中指定了一个name
orid
属性:
<a name="anchorName">..</a>
或者
<h1 id="anchorName2">..</h1>
我想获得与导航到http://server.com/path#anchorName
. 应该滚动页面,以便锚点靠近页面可见部分的顶部。
function scrollTo(hash) {
location.hash = "#" + hash;
}
根本不需要jQuery!
方式更简单:
var element_to_scroll_to = document.getElementById('anchorName2');
// Or:
var element_to_scroll_to = document.querySelectorAll('.my-element-class')[0];
// Or:
var element_to_scroll_to = $('.my-element-class')[0];
// Basically `element_to_scroll_to` just have to be a reference
// to any DOM element present on the page
// Then:
element_to_scroll_to.scrollIntoView();
您可以使用 jQuery 的.animate()、.offset()和scrollTop
. 喜欢
$(document.body).animate({
'scrollTop': $('#anchorName2').offset().top
}, 2000);
示例链接:http : //jsbin.com/unasi3/edit
如果你不想动画,使用.scrollTop()像:
$(document.body).scrollTop($('#anchorName2').offset().top);
或者 JavaScript 原生的,location.hash
比如:
location.hash = '#' + anchorid;
el.scrollIntoView({
behavior: 'smooth', // smooth scroll
block: 'start' // the upper border of the element will be aligned at the top of the visible part of the window of the scrollable area.
})
但据我所知,它没有以下选项的良好支持。
const element = document.querySelector('#element')
const topPos = element.getBoundingClientRect().top + window.pageYOffset
window.scrollTo({
top: topPos, // scroll so that the element is at the top of the view
behavior: 'smooth' // smooth scroll
})
const element = document.querySelector('#element')
const rect = element.getBoundingClientRect() // get rects(width, height, top, etc)
const viewHeight = Math.max(document.documentElement.clientHeight, window.innerHeight || 0);
window.scroll({
top: rect.top + rect.height / 2 - viewHeight / 2,
behavior: 'smooth' // smooth scroll
});
支持:
他们编写scroll
的方法与 相同scrollTo
,但在scrollTo
.
大由jAndy的解决方案,但平滑滚动似乎有在Firefox工作的问题。
以这种方式编写它也适用于 Firefox。
(function($) {
$(document).ready(function() {
$('html, body').animate({
'scrollTop': $('#anchorName2').offset().top
}, 2000);
});
})(jQuery);