最近在利用React+Redux写网站,遇到一个页面滚动的问题。由于不想引入jQuery,也不想引入别的library去专门做这个事, 所以稍微研究了一下解决方案。
场景一 滚动到页面顶部
这个很简单,window对象有个scrollTo方法,通过这个方法即可:
scrollTo(0, 0)
场景二 滚动到页面某一位置
设置目标位置的id, 然后在a标签中指定对应的id即可
<div id="pos">滚动到这里</div>
....
<a href="#pos">点我滚动</a>
场景三 滚动到页面某一位置,再移位
当用场景二的办法时,目标位置会处于页面的顶端。但是现在很多网站是在页面最上方有个导航栏的。这样子, 目标位置会被导航栏遮住。所以,我们不是要让目标位置滚动到页面顶端,而是要滚动到顶端后再往下移动一点。
这个时候,应该结合以上两个技术,通过scrollTop获取滚动条位置,然后作简单偏移处理。
//假设导航栏高50
function handleScroll() {
// 点击a之后, 先让浏览器滚动好,然后再作这个偏移,所以需要setTimeout
setTimeout(function() {
var top = window.document.scrollTop;
scrollTo(0, top - 50);
}, 100);
}
同时, a的设置为
<a href="#pos" onClick="handleScroll()">点我滚动</a>
补充:
为了兼容各种浏览器, 取scrollTop得方法应该为:
var top = document.body.scrollTop || document.documentElement.scrollTop || window.pageYOffset;