zoukankan      html  css  js  c++  java
  • 返回顶部案例

    1. 带有动画的返回顶部

    2. 此时可以继续使用我们封装的动画函数

    3. 只需要把所有的left 相关的值改为 跟 页面垂直滚动距离相关就可以了

    4. 页面滚动了多少,可以通过 window.pageYOffset 得到

    5. 最后是页面滚动,使用 window.scroll(x,y)

      //1. 获取元素
           var sliderbar = document.querySelector('.slider-bar');
           var banner = document.querySelector('.banner');
           // banner.offestTop 就是被卷去头部的大小 一定要写到滚动的外面
           var bannerTop = banner.offsetTop
               // 当我们侧边栏固定定位之后应该变化的数值
           var sliderbarTop = sliderbar.offsetTop - bannerTop;
           // 获取main 主体元素
           var main = document.querySelector('.main');
           var goBack = document.querySelector('.goBack');
           var mainTop = main.offsetTop;
           // 2. 页面滚动事件 scroll
           document.addEventListener('scroll', function() {
                   // console.log(11);
                   // window.pageYOffset 页面被卷去的头部
                   // console.log(window.pageYOffset);
                   // 3 .当我们页面被卷去的头部大于等于了 172 此时 侧边栏就要改为固定定位
                   if (window.pageYOffset >= bannerTop) {
                       sliderbar.style.position = 'fixed';
                       sliderbar.style.top = sliderbarTop + 'px';
                  } else {
                       sliderbar.style.position = 'absolute';
                       sliderbar.style.top = '300px';
                  }
                   // 4. 当我们页面滚动到main盒子,就显示 goback模块
                   if (window.pageYOffset >= mainTop) {
                       goBack.style.display = 'block';
                  } else {
                       goBack.style.display = 'none';
                  }

              })
               // 3. 当我们点击了返回顶部模块,就让窗口滚动的页面的最上方
           goBack.addEventListener('click', function() {
               // 里面的x和y 不跟单位的 直接写数字即可
               // window.scroll(0, 0);
               // 因为是窗口滚动 所以对象是window
               animate(window, 0);
          });

    修改后的动画函数:

     // 把所有的left 相关的值改为 跟 页面垂直滚动距离相关
           function animate(obj, target, callback) {
               // 清除以前的定时器,只保留一个定时器
               clearInterval(obj.timer);
               obj.timer = setInterval(function () {
                   // 步长值写到定时器里面
                   // 步长需要取整 以免出现小数
                   // var step = Math.cell((target - obj.offsetLeft) / 10);
                   // 页面滚动了多少,可以通过 window.pageYOffset 得到
                   var step = (target - window.pageYOffset) / 10;
                   // 正数就向上取整,负数就向下取整
                   step = step > 0 ? Math.ceil(step) : Math.floor(step);
                   // 移动到指定位置就停止动画
                   if (window.pageYOffset == target) {
                       // 停止动画 本质是停止定时器
                       clearInterval(obj.timer);
                       // if (callback) {
                       //     callback();
                       // };
                       callback && callback();
                  }
                   //把每次加1这个步长值改为一个慢慢变小的值 步长公式: (目标值-现在的位置) / 10
                   // obj.style.left = obj.offsetLeft + step + 'px';
                   // 页面滚动,使用 window.scroll(x,y)
                   window.scroll(0, window.pageYOffset + step);
              }, 15);
          }

     

    星辰ꦿ.大海
  • 相关阅读:
    指向函数的指针 分类: C/C++ 2015-07-13 11:03 14人阅读 评论(0) 收藏
    Nginx平台构架 分类: Nginx 2015-07-13 10:55 205人阅读 评论(0) 收藏
    Nginx介绍 分类: Nginx 服务器搭建 2015-07-13 10:50 19人阅读 评论(0) 收藏
    C++ Virtual介绍 分类: C/C++ 2015-06-16 21:36 26人阅读 评论(0) 收藏
    Ubuntu vim+ ctags(包含系统函数) + taglist 配置 分类: vim ubuntu 2015-06-09 18:19 195人阅读 评论(0) 收藏
    Makefile 入门与基本语法 分类: C/C++ ubuntu 2015-05-18 11:16 466人阅读 评论(0) 收藏
    计算机视觉顶会 2015-05-03 16:17 47人阅读 评论(0) 收藏
    python如何使用 os.path.exists()--Learning from stackoverflow 分类: python 2015-04-23 20:48 139人阅读 评论(0) 收藏
    Python调用C可执行程序(subprocess) 分类: python 服务器搭建 C/C++ shell 2015-04-13 21:03 87人阅读 评论(0) 收藏
    C Struct Hack
  • 原文地址:https://www.cnblogs.com/xc-dh/p/13760590.html
Copyright © 2011-2022 走看看