js实现带有动画的返回顶部


Posted in Javascript onAugust 09, 2020

本文实例为大家分享了js实现带有动画返回顶部的具体代码,供大家参考,具体内容如下

1、滑动鼠标往下滑动,侧边栏跟着往上移动,当到达某一个位置的时候,侧边栏停止移动;鼠标往上,则侧边栏往下-停止

js实现带有动画的返回顶部

2、当鼠标继续下滑到某一个位置,“返回顶部”几个字会弹出此处如果点击“返回顶部”,则立刻到了顶部

js实现带有动画的返回顶部

3、到达顶部位置效果

js实现带有动画的返回顶部

4、源代码

<!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>
    * {
      margin: 0;
      padding: 0;
    }

    /* 版心 */
    .w {
      width: 980px;
      margin: 0 auto;
    }

    /* 头部样式 */
    .head {
      height: 200px;
      background-color: teal;
    }

    /* 内容区域样式 */
    .banner {
      height: 450px;
      background-color: red
    }

    /* sidebar是侧边栏 */
    .sidebar {
      position: absolute;
      top: 300px;
      right: 250px;
      display: inline-block;
      width: 40px;
      height: 80px;
      background-color: cyan;
      text-align: center;
    }

    /* 侧边栏 “返回顶部”字体 */
    .sidebar span {
      display: none;
      font-size: 14px;
      cursor: pointer;
    }

    /* 主体div样式 */
    .zhuti {
      height: 300px;
      background-color: violet;
    }

    /* 底部样式 */
    .footer {
      height: 700px;
      background-color: yellow;
    }
  </style>
</head>

<body>
  <div class="sidebar">广告<br><br>
    <span id="returns">返回顶部</span>
  </div>
  <div class="head w">头部区域</div>
  <div class="banner w">banner区域</div>
  <div class="zhuti w">主体区域</div>
  <div class="footer w">尾部区域</div>

  <script>
    // Js代码部分
    var sidebar = document.querySelector('.sidebar')
    var banner = document.querySelector('.banner')
    var bannerTop = banner.offsetTop;

    // 获取 主体 区域的事件源
    var zhuti = document.querySelector('.zhuti');
    var span = document.querySelector('span');
    var zhutiTop = zhuti.offsetTop;
    // console.log(bannerTop) // 200 
    // banner.offestTop 就是被卷去头部的大小 一定要写到滚动的外面
    // 当我们侧边栏固定定位之后应该变化的数值
    var sidebarTop = sidebar.offsetTop - bannerTop;
    document.addEventListener('scroll', function () {
      // console.log(window.pageYOffset)
      if (window.pageYOffset >= bannerTop) {
        sidebar.style.position = 'fixed';
        sidebar.style.top = sidebarTop + 'px';
      } else {
        sidebar.style.position = 'absolute';
        sidebar.style.top = 300 + 'px';
      }

      // 当到底主题区域的时候,显示span的内容
      if (window.pageYOffset >= zhutiTop) {
        span.style.display = 'block';
      } else {
        span.style.display = 'none';
      }
    })
    // 封装了一个动画js文件
    function animation(obj, target, fn1) {
      // console.log(fn1);
      // fn是一个回调函数,在定时器结束的时候添加
      // 每次开定时器之前先清除掉定时器
      clearInterval(obj.timer);
      obj.timer = setInterval(function () {
        // 步长计算公式  越来越小
        // 步长取整
        var step = (target - obj.pageYOffset) / 10;
        step = step > 0 ? Math.ceil(step) : Math.floor(step);
        if (obj.pageYOffset == target) {
          clearInterval(obj.timer);
          // 如果fn1存在,调用fn
          if (fn1) {
            fn1();
          }
        } else {
          // 每30毫秒就将新的值给obj.left
          window.scroll(0, obj.pageYOffset + step);
        }
      }, 30)
    }

    // 获取返回顶部的事件 点击触发
    var returns = document.querySelector('#returns');
    returns.addEventListener('click', function () {
      // alert(111);
      // window.scroll(x,y) 可以返回顶部
      // window.scroll(0,0);
      animation(window, 0)
    })
  </script>
</body>

</html>

5、喜欢记得点击,关注,收藏噢,不喜勿喷~

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
浅析JavaScript基本类型与引用类型
May 28 Javascript
jQuery判断元素上是否绑定了指定事件的方法
Mar 17 Javascript
javascript实时获取鼠标坐标值并显示的方法
Apr 30 Javascript
javascript十六进制及二进制转化的方法
May 06 Javascript
jQuery hover事件简单实现同时绑定2个方法
Jun 07 Javascript
Bootstrap图片轮播组件使用实例解析
Jun 30 Javascript
jquery 中toggle的2种用法详解(推荐)
Sep 02 Javascript
bootstrap配合Masonry插件实现瀑布式布局
Jan 18 Javascript
React Native中NavigatorIOS组件的简单使用详解
Jan 27 Javascript
微信小程序实现人脸识别登陆的示例代码
Apr 02 Javascript
解决ie11 SCRIPT5011:不能执行已释放Script的代码问题
May 05 Javascript
socket在egg中的使用实例代码详解
May 30 Javascript
Vue将props值实时传递 并可修改的操作
Aug 09 #Javascript
js实现轮播图效果 纯js实现图片自动切换
Aug 09 #Javascript
vue 子组件watch监听不到prop的解决
Aug 09 #Javascript
vue 重塑数组之修改数组指定index的值操作
Aug 09 #Javascript
bootstrap-closable-tab可实现关闭的tab标签页插件
Aug 09 #Javascript
bootstrap实现tab选项卡切换
Aug 09 #Javascript
vue动画—通过钩子函数实现半场动画操作
Aug 09 #Javascript
You might like
香妃
2021/03/03 冲泡冲煮
php写的简易聊天室代码
2011/06/04 PHP
PHP生成器简单实例
2015/05/13 PHP
PHP+MySQL统计该库中每个表的记录数并按递减顺序排列的方法
2016/02/15 PHP
详谈php ip2long 出现负数的原因及解决方法
2017/04/05 PHP
jquery checkbox,radio是否选中的判断代码
2010/03/20 Javascript
jQuery EasyUI API 中文文档 DateTimeBox日期时间框
2011/10/16 Javascript
深入理解javascript的执行顺序
2014/04/04 Javascript
Javascript中arguments对象详解
2014/10/22 Javascript
JavaScript ES5标准中新增的Array方法
2016/06/28 Javascript
JavaScript中有关一个数组中最大值和最小值及它们的下表的输出的解决办法
2016/07/01 Javascript
KVM虚拟化技术之使用Qemu-kvm创建和管理虚拟机的方法
2016/10/05 Javascript
微信小程序 require机制详解及实例代码
2016/12/14 Javascript
Bootstrap响应式表格详解
2017/05/23 Javascript
echarts整合多个类似option的方法实例
2018/07/10 Javascript
vue-cli初始化项目中使用less的方法
2018/08/09 Javascript
JavaScript实现构造json数组的方法分析
2018/08/17 Javascript
JS实现网站吸顶条
2020/01/08 Javascript
Python采用Django开发自己的博客系统
2020/09/29 Python
Python深度优先算法生成迷宫
2018/01/22 Python
Tensorflow 同时载入多个模型的实例讲解
2018/07/27 Python
解决pycharm安装后代码区不能编辑的问题
2018/10/28 Python
python sorted方法和列表使用解析
2019/11/18 Python
python飞机大战pygame游戏背景设计详解
2019/12/17 Python
Pytorch GPU显存充足却显示out of memory的解决方式
2020/01/13 Python
Opencv求取连通区域重心实例
2020/06/04 Python
如何用H5实现一个触屏版的轮播器的实例
2017/01/09 HTML / CSS
彪马美国官网:PUMA美国
2017/03/09 全球购物
波兰在线香水店:Perfumy.pl
2019/08/12 全球购物
《匆匆》教学反思
2014/02/22 职场文书
教师党员个人剖析材料
2014/09/29 职场文书
2014年乡镇卫生院工作总结
2014/11/24 职场文书
公积金接收函格式
2015/01/30 职场文书
python-opencv 中值滤波{cv2.medianBlur(src, ksize)}的用法
2021/06/05 Python
Java实战之课程信息管理系统的实现
2022/04/01 Java/Android
Vscode中SSH插件如何远程连接Linux
2022/05/02 Servers