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封装DOMContentLoaded事件实例
Jun 12 Javascript
JavaScript中的标签语句用法分析
Feb 10 Javascript
js实现文本框宽度自适应文本宽度的方法
Aug 13 Javascript
浅谈使用splice函数对数组中的元素进行删除时的注意事项
Dec 04 Javascript
JQueryEasyUI框架下的combobox的取值和绑定的方法
Jan 22 Javascript
jQuery树插件zTree使用方法详解
May 02 jQuery
激动人心的 Angular HttpClient的源码解析
Jul 10 Javascript
javascript中的event loop事件循环详解
Dec 14 Javascript
JS判断数组里是否有重复元素的方法小结
May 21 Javascript
通过扫小程序码实现网站登陆功能
Aug 22 Javascript
React中获取数据的3种方法及优缺点
Feb 18 Javascript
vue+高德地图实现地图搜索及点击定位操作
Sep 09 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
基于文本的访客签到簿
2006/10/09 PHP
PHP Class&amp;Object -- 解析PHP实现二叉树
2013/06/25 PHP
PHP 利用Mail_MimeDecode类提取邮件信息示例
2014/01/26 PHP
学习php设计模式 php实现访问者模式(Visitor)
2015/12/07 PHP
PHP的PDO常用类库实例分析
2016/04/07 PHP
使用WAMP搭建PHP本地开发环境
2017/05/10 PHP
用JavaScript实现类似于ListBox功能示例代码
2014/03/09 Javascript
原生js获取宽高与jquery获取宽高的方法关系对比
2014/04/04 Javascript
js实现刷新iframe的方法汇总
2015/04/27 Javascript
JS实现仿苹果底部任务栏菜单效果代码
2015/08/28 Javascript
干货分享:让你分分钟学会javascript闭包
2015/12/25 Javascript
jQuery基本过滤选择器用法示例
2016/09/09 Javascript
jQuery Checkbox 全选 反选的简单实例
2016/11/29 Javascript
jQuery 1.9版本以上的浏览器判断方法代码分享
2017/08/28 jQuery
捕获未处理的Promise错误方法
2017/10/13 Javascript
vue-cli项目修改文件热重载失效的解决方法
2018/09/19 Javascript
详解vue项目中调用百度地图API使用方法
2019/04/25 Javascript
js针对图片加载失败的处理方法分析
2019/08/24 Javascript
vue-父子组件和ref实例详解
2019/11/10 Javascript
如何在JavaScript中创建具有多个空格的字符串?
2020/02/23 Javascript
python3实现磁盘空间监控
2018/06/21 Python
Django url,从一个页面调到另个页面的方法
2019/08/21 Python
pycharm中import呈现灰色原因的解决方法
2020/03/04 Python
python实现简单贪吃蛇游戏
2020/09/29 Python
英国知名的皮手套品牌:Dents
2016/11/13 全球购物
bonprix匈牙利:女士、男士和儿童服装
2019/07/19 全球购物
学年自我鉴定范文
2013/10/01 职场文书
护理专业自荐书
2014/06/04 职场文书
租房安全协议书
2014/08/20 职场文书
企业员工爱岗敬业演讲稿
2014/08/26 职场文书
2016年“9.22”世界无车日活动小结
2016/04/05 职场文书
python关于集合的知识案例详解
2021/05/30 Python
Mysql8.0递归查询的简单用法示例
2021/08/04 MySQL
Redis如何实现分布式锁
2021/08/23 Redis
Win11开始菜单添加休眠选项
2022/04/19 数码科技
Java Spring Boot请求方式与请求映射过程分析
2022/06/25 Java/Android