javascript - 前端,实现返回顶部,但是只能第一次起作用

查看:59
本文介绍了javascript - 前端,实现返回顶部,但是只能第一次起作用的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

问 题

问题:实现返回顶部,但是只能第一次起作用。求解决啊!

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<style>
    .top {
        width: 150px;
        height: 150px;
        background:red;
        position: fixed;
        right: 0;
        bottom: 10px;
        display:none;
    }
</style>
<body>
    f<br>
    f<br>
    f<br>
    f<br>
    f<br>
    f<br>
    f<br>
    f<br>
    f<br>
    f<br>
    f<br>
    f<br>
    f<br>
    f<br>
    f<br>
    f<br>
    f<br>
    f<br>
    f<br>
    f<br>
    f<br>
    f<br>
    f<br>
    f<br>
    f<br>
    f<br>
    f<br>
    f<br>
    f<br>
    f<br>
    f<br>
    f<br>
    f<br>
    f<br>
    f<br>
    f<br>
    f<br>
    f<br>
    f<br>
    f<br>
    f<br>
    f<br>
    f<br>
    f<br>
    f<br>
    f<br>
    f<br>
    f<br>
    f<br>
    f<br>
    f<br>
    f<br>
    f<br>
    f<br>
    f<br>
    f<br>
    f<br>
    f<br>
    f<br>
    f<br>
    f<br>
    f<br>
    f<br>
    f<br>
    f<br>
    f<br>
    f<br>
    f<br>
    f<br>
    f<br>
    f<br>
    f<br>
    f<br>
    f<br>
    f<br>
    f<br>
    f<br>
    f<br>
    f<br>
    f<br>
    f<br>
    f<br>
    f<br>
    f<br>
    f<br>
    f<br>
    f<br>
    f<br>
    f<br>
    f<br>
    f<br>
    f<br>
    f<br>
    f<br>
    f<br>
    f<br>
    f<br>
    f<br>
    f<br>
    f<br>
    f<br>
    f<br>
    f<br>
    f<br>
    f<br>
    f<br>
    f<br>
    f<br>
    f<br>
    f<br>
    f<br>
    f<br>
    f<br>
    f<br>
    f<br>
    f<br>
    f<br>
    f<br>
    f<br>
    f<br>
    f<br>
    f<br>
    f<br>
    f<br>
    f<br>
    f<br>
    f<br>
    f<br>
    f<br>
    f<br>
    f<br>
    f<br>
    f<br>
    f<br>
    f<br>
    f<br>
    f<br>
    f<br>
    f<br>
    f<br>
    f<br>
    f<br>
    f<br>
    f<br>
    f<br>
    f<br>
    f<br>
    f<br>
    f<br>
    f<br>
    <div class="top" id="goTop"></div>
    <script>
      var goTop = document.getElementById("goTop");

      window.onscroll = function () {
          if(window.pageYOffset > 100){
              goTop.style.display = "block";
          }
      }
      goTop.onclick = function () {

          var start =window.pageYOffset,target =0,timer=null;

          timer = setInterval(function () {

            start +=(target - start)/10;

            window.scrollTo(0,start);

                if(start == 0) {//永远不能为0?
                    console.log(start);
                    clearInterval(timer);
                }

          },10);

      }
    </script>
</body>
</html>

解决方案

启动一个setInterval,然后永远没有满足清除setInterval的条件,setInterval在无限的执行下去,所以只有第一次起到作用。

start +=(target - start)/10;

您这段代码,每次都减去start自身的1/10,start永远不会等于零,只会无限接近于零。
按您的思路,代码大体应该是这个逻辑:

goTop.onclick = function () {

          var start =window.pageYOffset,wStart=0,timer=null;
          wStart=start;
          timer = setInterval(function () {
            wStart -= start/10;//新增一个变量用来接收,避免使用同一个变量导致start永远不为0
            window.scrollTo(0,wStart);
                if(wStart == 0) {//有可能为负数,此处用<=更为合适
                    goTop.style.display = "none";
                    console.log(wStart);
                    clearInterval(timer);
                }

          },10);

      }

这篇关于javascript - 前端,实现返回顶部,但是只能第一次起作用的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆