cu_Cbear 发表于 2012-01-19 23:28

JavaScript回到顶部的效果实现

JavaScript回到顶部的效果实现





原理:首先获取滚动条到页面顶部的距离,然后上移一定的距离,再获取滚动条到页面顶部的距离,再上移一定的距离(小于上一次上移的距离),以此类推:



Html代码<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>回到页面顶部</title>
<script type="text/javascript">
    /**   
   * 回到页面顶部   
   * @param acceleration 加速度   
   * @param time 时间间隔 (毫秒)   
   **/   
    function goTop(acceleration, time) {   
      accelerationacceleration = acceleration || 0.1;   
      timetime = time || 16;   

      var x1 = 0;   
      var y1 = 0;   
      var x2 = 0;   
      var y2 = 0;   
      var x3 = 0;   
      var y3 = 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;   
      }   
      var x3 = window.scrollX || 0;   
      var y3 = window.scrollY || 0;   

      // 滚动条到页面顶部的水平距离   
      var x = Math.max(x1, Math.max(x2, x3));   
      // 滚动条到页面顶部的垂直距离   
      var y = Math.max(y1, Math.max(y2, y3));   

      // 滚动距离 = 目前距离 / 速度, 因为距离原来越小, 速度是大于 1 的数, 所以滚动距离会越来越小   
      var speed = 1 + acceleration;   
      window.scrollTo(Math.floor(x / speed), Math.floor(y / speed));   

      // 如果距离不为零, 继续调用迭代本函数   
      if (x > 0 || y > 0) {   
            var invokeFunction = "goTop(" + acceleration + ", " + time + ")";   
            window.setTimeout(invokeFunction, time);   
      }   
    }   
</script>

</head>
<body>
<div style="height: 1500px;"></div>
<a href="#" onclick="goTop();return false;">返回到顶部</a>
</body>
</html>

小鬼萌萌控 发表于 2012-01-19 23:28

谢谢分享

sychangchun 发表于 2012-01-25 23:10

学习了。谢谢分享。
页: [1]
查看完整版本: JavaScript回到顶部的效果实现