美文网首页JavaScript前端
【前端案例】 20 - 案例:返回顶部

【前端案例】 20 - 案例:返回顶部

作者: itlu | 来源:发表于2020-12-22 09:20 被阅读0次

案例演示

返回顶部

功能分析

  1. 带有动画的返回顶部;

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

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

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

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

代码实现

html
<div class="slider_bar">
  <div class="goBack ">返回顶部</div>
</div>

<div class="header w fontStyle">头部区域</div>
<div class="banner w fontStyle">banner区域</div>
<div class="main w fontStyle">主体区域</div>
css
* {
      padding: 0;
      margin: 0;
    }

    .fontStyle {
      font-size: 25px;
      text-align: center;
      font-weight: 700;
    }

    .w {
      width: 1200px;
      margin: 10px auto;
    }

    .header {
      height: 150px;
      line-height: 150px;
      background-color: skyblue;
    }

    .banner {
      height: 220px;
      line-height: 220px;
      background-color: honeydew;
    }

    .main {
      height: 1200px;
      line-height: 1200px;
      background-color: seashell;
    }

    /* 侧边栏的编写 */
    .slider_bar {
      position: absolute;
      left: 50%;
      top: 300px;
      margin-left: 650px;
      width: 45px;
      height: 130px;
      background-color: deepskyblue;
    }

    .goBack {
      position: absolute;
      display: none;
      bottom: 0;
      cursor: pointer;
    }
javascript
 /**
   *   1. 事件源是document
   *
   *   2. 页面被卷去的头部 window.pageYOffset
   *
   *   3. 获取banner的offsetTop
   */
  let slider_bar = document.querySelector('.slider_bar');
  let banner = document.querySelector('.banner');
  let bannerTop = banner.offsetTop;
  let goBack = document.querySelector('.goBack');
  let sliderBarTop = (slider_bar.offsetTop - bannerTop);
  let main = document.querySelector('.main');
  let mainTop = main.offsetTop;
  // 页面滚动事件
  // document.documentElement 获取的是页面的根元素 html
  document.addEventListener('scroll', function () {
    // 页面滚动事件
    // console.log('666');
    // 获取当前页面距离顶部的距离
    // if ()
    if (pageYOffset >= bannerTop) {
      // 将 goBack 设置为固定定位
      slider_bar.style.position = 'fixed';
      // 避免跳动
      slider_bar.style.top = sliderBarTop + 'px';
    } else {
      slider_bar.style.position = 'absolute';
      slider_bar.style.top = '300px';
    }
    // 当页面滚动到main主体部分显示返回顶部
    // pageYOffset 有严重的兼容性问题
    if (pageYOffset >= mainTop) {
      goBack.style.display = 'block';
    } else {
      goBack.style.display = 'none';
    }
  });

  // 返回顶部使用的是window.scroll(x,y)
  goBack.addEventListener('click', () => {
    // 比较突兀的方式
    // window.scroll(0, 0)
    // 使用动画的方式
    // 需要使用的对象是 window
    animation(window, 0);
  });


  /**
   * 修改动画为垂直方向移动的
   * @param ele
   * @param target
   * @param callback
   */
  function animation(ele, target, callback) {
    // 在每次设置定时器之前清除对象中的默认定时器
    // 注意1
    clearInterval(ele.timer);
    ele.timer = setInterval(() => {
      // 计算缓动动画 步长
      let step = (target - ele.pageYOffset) / 10;
      // 判断如果是正值就向上取整 , 如果是负值就向下取整
      // 注意2
      step = step > 0 ? Math.ceil(step) : Math.floor(step);
      // 移动盒子
      // ele.style.left = ele.pageYOffset + step + 'px';
      // 使用 window.scroll 实现页面缓慢的移动
      window.scroll(0, ele.pageYOffset + step);

      // 判断当前是否超出目标值 如果超出就清除定时器
      if (ele.pageYOffset === target) {
        clearInterval(ele.timer);
        // 在清除定时器之后 需要执行一个回调函数
        // 注意3
        if (callback) {
          callback();
        }
      }
    }, 10);
  }

相关文章

  • 【前端案例】 20 - 案例:返回顶部

    案例演示 功能分析 带有动画的返回顶部; 此时可以继续使用我们封装的动画函数; 只需要把所有的left 相关的值改...

  • js -- DOM

    DOM – document object model 案例-回到顶部 案例- 全选 案例 - 选项卡 案例 - ...

  • JS案例-返回到顶部

    简单实用 效果演示: 源码:

  • js基础知识面试题(二)

    《jquery的常见插件》 《jquery尺寸和位置》 《案例:动画返回顶部》 《js面向对象和面向过程》 《es...

  • WebAPIs-案例

    无缝滚动 回到顶部 迷你微信聊天案例 瀑布流案例资料 像素鸟案例资料 飞机大战案例资料 表格排序案例(面向对象) ...

  • 案例:判断与顶部距离,点击按钮动态返回顶部

    css body

  • UINavigationController

    案例一:实现全屏滑动 案例二:去掉导航栏下的线 案例三:隐藏tabbar 案例三:隐藏导航栏返回文字 案例四:改变...

  • 2021-11-24

    数组方法应用案例 案例要求 目标:通过顶部的输入框和按钮来筛选后端传送的数据并显示在页面上 案例分析 HTML部分...

  • ES8-async函数

    async函数返回值 await返回值 案例

  • JAVA库存案例

    商场库存清单案例 A: 案例分析. a:观察清单后,可将清单分解为三个部分(清单顶部、清单中部、清单底部) b:清...

网友评论

    本文标题:【前端案例】 20 - 案例:返回顶部

    本文链接:https://www.haomeiwen.com/subject/kmzagktx.html