回到顶部效果之加速置顶

我在半年前接触过相关案例,最近重新看了一下,添加了详尽的注释,希望对初学者能有所帮助。

<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>加速回到顶部</title>
<style type="text/css">
*{
    margin: 0;
    padding: 0;
}
.container{
    width:900px; 
    overflow: hidden;
    margin:0 auto; 
    }
#backToTop {
    width:40px;
    height:40px;
    position:fixed;
    left:50%;   /* 将其左上角置于容器的水平方向上的中点 */
    margin-left:450px;  /* 向右移动图片容器的宽度的一半,以实现其左侧贴紧图片的边线的效果 */
    bottom:0; 
    background:url(http://img.mukewang.com/583ac6bb00010e9c00400080.png) no-repeat 0 0;
    display:none;   /*将按钮隐藏*/
    transition:all 0.5s ease;   /* 增加过渡效果 */
    }
    /*鼠标悬浮时改变样式*/
#backToTop:hover {
    bottom:14px;
    background-position: 0 -40px;
    }

</style>
</head>

<body>
    <div class="container">
        <img alt="..." src="http://img.mukewang.com/583ac6d30001a4ad13253338.png" />
    </div>
    <!-- 此处设置href的值的是为了阻止其回到顶部的默认行为。 -->
    <a href="javascript:;" id="backToTop" title="回到顶部"></a>

    <script type="text/javascript">

    window.onload = function () {

        var backToTop = document.getElementById("backToTop");//获取用于设置回到顶部功能的按钮
        var clientHeight =  document.documentElement.clientHeight;//获取可视区的高度
        var speed;    /*声明控制滚动速度的变量*/
        // 添加全局的滚动事件
        window.onscroll = function () {
            //获取滚动条到顶部的距离,即滚动条滚动了的距离
            var scrollTop = document.documentElement.scrollTop||document.body.scrollTop;
            //若滚动条到顶部的距离大于可视区的高度,即滚动的距离超过一屏,则显示按钮,反之,则隐藏。
            backToTop.style.display = (scrollTop>clientHeight)?"block":"none";
        }
        //实现加速滚动的函数
        function scrollToTop() {
            var scrollTop = document.documentElement.scrollTop||document.body.scrollTop;
            if(scrollTop>0){
                //将滚动条向上移动
                document.documentElement.scrollTop = document.body.scrollTop = scrollTop - speed; 
                speed += 4;   //增加步长,以实现加速滚动的效果
                setTimeout(scrollToTop,40); //每隔40ms,滚动一次
            }
        }
        //为按钮绑定单击事件
        backToTop.onclick = function () {
            speed = 10; //设置步长的初值
            scrollToTop();  //开始滚动
        }
    }

    </script>
<!--     attentions:
    1.问题:Chrome浏览器、Safari浏览器、opera浏览器不支持document.documentElement.scrollTop,只支持document.body.scrollTop;而IE和Firefox都只支持document.documentElement.scrollTop,而不支持document.body.scrollTop
      解决方案:通过  ||  操作符提供后备值。
    2.步长speed的初始化不能放到其声明的位置,而应该放到用于回到顶部的按钮上的单击事件里,当再次触发单击事件时,将其值还原到初始状态。
    3.不要因为该语句(var scrollTop = document.documentElement.scrollTop||document.body.scrollTop;)出现重复而将其转移到外层以实现复用,那是错误的。
    如果转移到了最外层,scrollTop将无法获取到更新后的值

     -->
</body>
</html>

作者: 人生还有多少个二十年
链接:http://www.imooc.com/article/…
来源:慕课网
本文原创发布于慕课网 ,转载请注明出处,谢谢合作!

    原文作者:ZRC_Struggling
    原文地址: https://segmentfault.com/a/1190000007689397
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞