zoukankan      html  css  js  c++  java
  • JS 滚动条卷去高度 回到顶部按钮实现

    浏览器滚动条卷去的高度(scrollTop)

    JS盒子模型中: client系列/ offset系列/ scrollWidth/ crollHeight, 都是只读属性, 不能通过属性修改元素的样式

    scrollTop/ scrollLeft: 滚动条卷去的高度/ 宽度, 是可读写属性.

    直接回到顶部
    box.scrollTop = 0;
    

    scrollTop的值存在边界值(最大和最小值), 修改的值不能超过边界

    最小值
    box.scrollTop = -1000;
    console.log(box.scrollTop);
    

    -> 0

    最大值
    var maxTop = box.scrollHeight - box.clientHeight;
    box.scrollTop = 2500;
    console.log(box.scrollTop === maxTop);
    

    -> true

    回到顶部按钮

    A标签本身是跳转页面的, 把跳转的地址写在href这个属性中

    • 不写值得话是刷新本页面
    • 写的如果是#target, 是瞄点定位, 定位到当前页面ID为target这个位置
    • "javascript:;", 这样写是取消A标签默认跳转的行为
    
    <!--
     * @Author: lemon
     * @Date: 2020-09-10 18:39:32
     * @LastEditTime: 2020-09-13 18:08:58
     * @LastEditors: Please set LastEditors
     * @Description: In User Settings Edit
     * @FilePath: React前端准备JS基础1.html
    -->
    <!DOCTYPE html>
    <html lang="en">
      <head>
        <meta charset="UTF-8" />
        <meta name="viewport" content="width=device-width, initial-scale=1.0" />
        <title>Document</title>
        <style type="text/css">
          * {
            margin: 0;
            padding: 0;
            font-family: "5FAE8F6F96C59ED1", Helvetica, sans-serif;
            font-size: 14px;
            -webkit-user-select: none;
          }
          html,
          body {
             100%;
            height: 500%;
            background-color: lightgoldenrodyellow;
            background: -webkit-radial-gradient(
              50px 30px,
              circle,
              #fff,
              #64d1dd,
              #4947ba
            );
            background: radial-gradient(50px 30px, circle, #fff, #64d1dd, #4947ba);
          }
          a {
            text-decoration: none;
            color: #000;
          }
          a:hover a:active a:target a:visited {
            text-decoration: none;
            color: #000;
          }
          #goLink {
            visibility: hidden;
            position: fixed;
            bottom: 150px;
            right: 50px;
             50px;
            height: 50px;
            line-height: 50px;
            text-align: center;
            background-color: red;
            opacity: 0.5;
            filter: alpha(opacity=50);
            border-radius: 50%;
          }
          #goLink:hover {
            opacity: 1;
            filter: alpha(opacity=100);
          }
          #target {
            margin: 1000px auto;
            height: 50px;
            background: red;
          }
        </style>
      </head>
      <body>
        <div id="box">
          要得到你必须要付出,要付出你还要学会坚持,如果你真的觉得很难,那你就放弃,但是你放弃了就不要抱怨,我觉得人生就是这样,世界是公平的,每个人都是通过自己的努力,去决定自己生活的样子
          要得到你必须要付出,要付出你还要学会坚持,如果你真的觉得很难,那你就放弃,但是你放弃了就不要抱怨,我觉得人生就是这样,世界是公平的,每个人都是通过自己的努力,去决定自己生活的样子
          要得到你必须要付出,要付出你还要学会坚持,如果你真的觉得很难,那你就放弃,但是你放弃了就不要抱怨,我觉得人生就是这样,世界是公平的,每个人都是通过自己的努力,去决定自己生活的样子
          要得到你必须要付出,要付出你还要学会坚持,如果你真的觉得很难,那你就放弃,但是你放弃了就不要抱怨,我觉得人生就是这样,世界是公平的,每个人都是通过自己的努力,去决定自己生活的样子
          要得到你必须要付出,要付出你还要学会坚持,如果你真的觉得很难,那你就放弃,但是你放弃了就不要抱怨,我觉得人生就是这样,世界是公平的,每个人都是通过自己的努力,去决定自己生活的样子
          要得到你必须要付出,要付出你还要学会坚持,如果你真的觉得很难,那你就放弃,但是你放弃了就不要抱怨,我觉得人生就是这样,世界是公平的,每个人都是通过自己的努力,去决定自己生活的样子
          要得到你必须要付出,要付出你还要学会坚持,如果你真的觉得很难,那你就放弃,但是你放弃了就不要抱怨,我觉得人生就是这样,世界是公平的,每个人都是通过自己的努力,去决定自己生活的样子
          要得到你必须要付出,要付出你还要学会坚持,如果你真的觉得很难,那你就放弃,但是你放弃了就不要抱怨,我觉得人生就是这样,世界是公平的,每个人都是通过自己的努力,去决定自己生活的样子
          要得到你必须要付出,要付出你还要学会坚持,如果你真的觉得很难,那你就放弃,但是你放弃了就不要抱怨,我觉得人生就是这样,世界是公平的,每个人都是通过自己的努力,去决定自己生活的样子
          要得到你必须要付出,要付出你还要学会坚持,如果你真的觉得很难,那你就放弃,但是你放弃了就不要抱怨,我觉得人生就是这样,世界是公平的,每个人都是通过自己的努力,去决定自己生活的样子
        </div>
        <a href="javascript:;" id="goLink">Go</a>
        <div id="target"></div>
      </body>
      <script type="text/javascript">
        var goLink = document.getElementById("goLink");
        // 开始GO按钮是不显示的, 只有当浏览器卷去的高度超过一屏, goLink按钮才会显示, 反之隐藏 ->只要浏览器的滚动条在滚动, 我们就需要判断goLink显示还是隐藏
        // 浏览器的滚动条滚动: 拖动滚动条, 鼠标滚动, 键盘上下键或者pageDown/pageUp键, 点击滚动条的空白处或者箭头(自主操作的行为)。。。我们还可以通过JS控制scrollTop的值来实现滚动条的滚动
        function scrollDisplay() {
          // window.onscroll不管怎么操作, 只要滚动条懂了就会出发这个行为
          var curTop =
            document.documentElement.scrollTop || document.body.scrollTop;
          var curHeight =
            document.documentElement.clientHeight || document.body.clientHeight;
          curTop > curHeight
            ? (goLink.style.visibility = "visible")
            : (goLink.style.visibility = "hidden");
        }
        window.onscroll = scrollDisplay;
        // 缓慢回到顶部
        goLink.onclick = function () {
          window.onscroll = null;
          goLink.style.visibility = "hidden";
          var duration = 500; // 总时间500ms
          var interval = 10; // 频率10mx
          var target =
            document.documentElement.scrollTop || document.body.scrollTop; // 总距离:当前的位置的(当前的scrollTop值) - 目标位置(0)
          var step = (target / duration) * interval; // 步长, 每一次走的距离 target/duration > 每1ms走的距离 * interval > 每一次走的距离
          // 计算完成步长后, 让当前的页面每隔interval这么长的时间走一步: 在原来的scrollTop的基础上-步长
          var timer = window.setInterval(function () {
            var curTop =
              document.documentElement.scrollTop || document.body.scrollTop;
            curTop -= step;
            if (curTop <= 0) {
              // 走到头了
              console.log("走到头了");
              window.clearInterval(timer);
              window.onscroll = scrollDisplay;
              return;
            }
            document.documentElement.scrollTop = curTop;
            document.body.scrollTop = curTop;
          }, interval);
        };
      </script>
    </html>
    
  • 相关阅读:
    重装win7之后,wubi安装的ubuntu的启动菜单不见
    data_source.rb:182: TZInfo::DataSourceNotFound解决办法
    Gem::InstallerError:The 'json' native gem requires installed build tools
    去掉DL is deprecated, please use Fiddle警告信息
    ruby on rails安装(ubuntu 14.04)
    ruby on rails 安装(win8 64位)
    满城月季花开
    python中的zip()函数
    python学习之“序列”的理解
    二进制、十进制、八进制、十六进制的理解
  • 原文地址:https://www.cnblogs.com/xiaoxu-xmy/p/13662321.html
Copyright © 2011-2022 走看看