# 实现回到顶部效果

原生js返回顶部

# a标签锚点定位

<a>标签锚点定位,这是最简单的。(a标签的href属性等于要到达位置元素的id值,或使用a标签本身的name属性查找)

<body>
    <!-- 设置锚点 -->
    <a href="#mark-1">跳转到区域一</a><br>
    <a href="#mark-2">跳转到区域二</a>
    <br><br><br><br><br><br><br><br><br><br><br><br> <br><br><br><br><br><br><br><br><br><br><br><br>
    <br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br>
    <br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br>
    <br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br>
     <div id="mark-1">区域一</div>
     <!-- 如果要测试name效果,可以注销上面一段,然后点击锚点mark-2跳转到区域二 -->
     <a href=""  name="mark-2"></a><div>区域二</div>
</body>

上面只是跳转同一页面,如果要跳到另一个页面的锚点目标,就需要先跳转页面。例如a.html跳到b.html中,在a.html这样设置锚点:

<a href="b.html#mark">跳到b页面</a>

# 根节点设置scrollTop为0

js直接设置,也无动画效果不好,注意兼容写法:

// 兼容写法
document.body.scrollTop = 0;
document.documentElement.scrollTop = 0; 

# 设置动画效果

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
    <style>
        li { height: 100px;border-bottom: 1px solid #ccc; }
        #toTop {display: none;position: fixed;right: 20px;bottom: 20px; background: #ccc; border-radius: 5px;padding: 10px 15px;}
    </style>
</head>
<body>
    <div class="demo" style="height: 2000px;">
        <ul>
            <li>demo1</li>
            <li>demo2</li>
            <li>demo3</li>
            <li>demo4</li>
            <li>demo5</li>
            <li>demo6</li>
            <li>demo7</li>
            <li>demo8</li>
            <li>demo9</li>
            <li>demo10</li>
        </ul>
    </div>
    <div id="toTop">back</div>
</body>
</html>

<script>
   //  匀速返回 (定时器开启前速度已经计算好)
    var toTop = document.querySelector('#toTop')
    toTop.onclick = function(){
        var dom = document.querySelector('body');
        var h = dom.scrollTop;
        var subH = parseInt(h / 50);
        var timer = setInterval(function(){
            h -= subH;
            if(h <= 0){
                dom.scrollTop = 0;
                clearInterval(timer);
            }else{
                dom.scrollTop = h;
            }
        },1)    
    }
    window.onscroll = function(){
        if(window.pageYOffset>300){
            toTop.style.display = "block";
        }else{
            toTop.style.display = "none";
        }
    }
</script>
<script>
// 以下是变速效果
function goTop() {
  // 由快到慢  (每次开启定时器都重新计算速度)
    timer = setInterval( function(){
        //获取滚动条的滚动高度
        var scrollTop = document.documentElement.scrollTop || document.body.scrollTop;
        //用于设置速度差,产生缓动的效果
        var speed = Math.floor(-scrollTop / 8);
        document.documentElement.scrollTop = document.body.scrollTop = scrollTop + speed;//用纯数字赋值
        isTop =true;  //用于阻止滚动事件清除定时器
        if(scrollTop == 0){
            clearInterval(timer);
        }
    },50 );
}
</script>
Last Updated: 4/24/2020, 1:44:36 PM