用原生js做个简单的滑动效果的回到顶部
很多网页在下方都会放置一个“返回顶部”按钮,尤其是页面底部没有导航的网页,这样可以帮助访客重新找到导航或者重温一遍广告(想得真美)。随着近几年来JavaScript的应用日渐广泛,滑动效果无处不在,于是我也跟跟风,将返回顶部功能做成了滑动效果。后来为了更贴合物理特征,改造做成了减速的滑动效果。
首先说一下原理吧,我们会获取滚动条到页面顶部的距离,然后上移一定的距离;再获取滚动条到页面顶部的距离,上移一定的距离(比上一次小一点);以此类推...
<scripttype="text/javascript">
/**
*回到页面顶部
*@paramacceleration加速度
*@paramtime时间间隔(毫秒)
**/
functiongoTop(acceleration,time){
acceleration=acceleration||0.1;
time=time||16;
varx1=0;
vary1=0;
varx2=0;
vary2=0;
varx3=0;
vary3=0;
if(document.documentElement){
x1=document.documentElement.scrollLeft||0;
y1=document.documentElement.scrollTop||0;
}
if(document.body){
x2=document.body.scrollLeft||0;
y2=document.body.scrollTop||0;
}
varx3=window.scrollX||0;
vary3=window.scrollY||0;
//滚动条到页面顶部的水平距离
varx=Math.max(x1,Math.max(x2,x3));
//滚动条到页面顶部的垂直距离
vary=Math.max(y1,Math.max(y2,y3));
//滚动距离=目前距离/速度,因为距离原来越小,速度是大于1的数,所以滚动距离会越来越小
varspeed=1+acceleration;
window.scrollTo(Math.floor(x/speed),Math.floor(y/speed));
//如果距离不为零,继续调用迭代本函数
if(x>0||y>0){
varinvokeFunction="goTop("+acceleration+","+time+")";
window.setTimeout(invokeFunction,time);
}
}
</script>
document.documentElement.scrollTop,document.body.scrollTop,window.scrollY其实都是一样的,但它们只在某些浏览器中起作用。至于那哪个在哪些浏览器起作用可以自己调试一下。
如何使用?
<ahref="#"onclick="goTop();returnfalse;">TOP</a>