Javascript实现网页平滑滚动回到顶部

很多网页在下方都会放置一个“返回顶部”按钮,尤其是页面底部没有导航的网页,这样可以帮助访客重新找到导航或者重温一遍广告(想得真美)。随着近几年来 JavaScript 的应用日渐广泛,滑动效果无处不在,于是我也跟跟风,将返回顶部功能做成了滑动效果。后来为了更贴合物理特征, 改造做成了减速的滑动效果。

首先说一下原理吧,我们会获取滚动条到页面顶部的距离,然后上移一定的距离;再获取滚动条到页面顶部的距离,上移一定的距离(比上一次小一点);以此类推 ...

JavaScript代码
  1. <script type="text/javascript">  
  2. /** 
  3.  * 回到页面顶部 
  4.  * @param acceleration 加速度 
  5.  * @param time 时间间隔 (毫秒) 
  6.  **/  
  7. function goTop(acceleration, time) {  
  8.     acceleration = acceleration || 0.1;  
  9.     time = time || 16;  
  10.    
  11.     var x1 = 0;  
  12.     var y1 = 0;  
  13.     var x2 = 0;  
  14.     var y2 = 0;  
  15.     var x3 = 0;  
  16.     var y3 = 0;  
  17.    
  18.     if (document.documentElement) {  
  19.         x1 = document.documentElement.scrollLeft || 0;  
  20.         y1 = document.documentElement.scrollTop || 0;  
  21.     }  
  22.     if (document.body) {  
  23.         x2 = document.body.scrollLeft || 0;  
  24.         y2 = document.body.scrollTop || 0;  
  25.     }  
  26.     var x3 = window.scrollX || 0;  
  27.     var y3 = window.scrollY || 0;  
  28.    
  29.     // 滚动条到页面顶部的水平距离  
  30.     var x = Math.max(x1, Math.max(x2, x3));  
  31.     // 滚动条到页面顶部的垂直距离  
  32.     var y = Math.max(y1, Math.max(y2, y3));  
  33.    
  34.     // 滚动距离 = 目前距离 / 速度, 因为距离原来越小, 速度是大于 1 的数, 所以滚动距离会越来越小  
  35.     var speed = 1 + acceleration;  
  36.     window.scrollTo(Math.floor(x / speed), Math.floor(y / speed));  
  37.    
  38.     // 如果距离不为零, 继续调用迭代本函数  
  39.     if(x > 0 || y > 0) {  
  40.         var invokeFunction = "goTop(" + acceleration + ", " + time + ")";  
  41.         window.setTimeout(invokeFunction, time);  
  42.     }  
  43. }   
  44. </script>  

调用方法:

XML/HTML代码
  1. <a href="#" onclick="goTop();return false;">TOP</a>


上一篇: Javascript实现透明度渐变效果
下一篇: Javascript返回页面顶部的滚动特效
文章来自: 本站原创
引用通告: 查看所有引用 | 我要引用此文章
Tags: javascript
相关日志:
评论: 0 | 引用: 0 | 查看次数: 3139
发表评论
昵 称:
密 码: 游客发言不需要密码.
邮 箱: 邮件地址支持Gravatar头像,邮箱地址不会公开.
网 址: 输入网址便于回访.
内 容:
验证码:
选 项:
虽然发表评论不用注册,但是为了保护您的发言权,建议您注册帐号.
字数限制 1000 字 | UBB代码 开启 | [img]标签 关闭

 广告位

↑返回顶部↑