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 兼容firefox的一些问题
May 21 Javascript
DOM 脚本编程中的兄弟节点
Oct 31 Javascript
使用JavaScript构建JSON格式字符串实现步骤
Mar 22 Javascript
巧用jquery解决下拉菜单被Div遮挡的相关问题
Feb 13 Javascript
jQuery标签替换函数replaceWith()的使用例子
Aug 28 Javascript
事件委托与阻止冒泡阻止其父元素事件触发
Sep 02 Javascript
Javascript基础知识(二)事件
Sep 29 Javascript
JavaScript中实现Map的示例代码
Sep 09 Javascript
js仿微信语音播放实现思路
Dec 12 Javascript
select自定义小三角样式代码(实用总结)
Aug 18 Javascript
谈一谈vue请求数据放在created好还是mounted里好
Jul 27 Javascript
原生js实现拖拽移动与缩放效果
Aug 24 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
首页四格,首页五格For6.0(GBK)(UTF-8)[12种组合][9-18][版主安装测试通过]
2007/09/24 PHP
PHP实现克鲁斯卡尔算法实例解析
2014/08/22 PHP
thinkPHP模型初始化实例分析
2015/12/03 PHP
PHP实现十进制数字与二十六进制字母串相互转换操作示例
2018/08/10 PHP
js取得html iframe中的元素和变量值
2014/06/30 Javascript
将数字转换成大写的人民币表达式的js函数
2014/09/21 Javascript
JavaScript字符串对象fromCharCode方法入门实例(用于把Unicode值转换为字符串)
2014/10/17 Javascript
html的DOM中Event对象onabort事件用法实例
2015/01/21 Javascript
javascript数组遍历的方法实例分析
2016/09/13 Javascript
简单实现bootstrap选项卡效果
2017/02/08 Javascript
jQuery鼠标移动图片上实现放大效果
2017/06/25 jQuery
详解win7 cmd执行vue不是内部命令的解决方法
2017/07/27 Javascript
nodejs中art-template模板语法的引入及冲突解决方案
2017/11/07 NodeJs
关于Google发布的JavaScript代码规范你要知道哪些
2018/04/04 Javascript
小程序实现人脸识别功能(百度ai)
2018/12/23 Javascript
javascript绘制简单钟表效果
2020/04/07 Javascript
es6函数中的作用域实例分析
2020/04/18 Javascript
vuex中store存储store.commit和store.dispatch的用法
2020/07/24 Javascript
[03:14]辉夜杯主赛事 12月25日每日之星
2015/12/26 DOTA
深入解读Python解析XML的几种方式
2016/02/16 Python
python+VTK环境搭建及第一个简单程序代码
2017/12/13 Python
python修改list中所有元素类型的三种方法
2018/04/09 Python
python3 打开外部程序及关闭的示例
2018/11/06 Python
pyqt5实现俄罗斯方块游戏
2019/01/11 Python
Flask框架钩子函数功能与用法分析
2019/08/02 Python
使用 django orm 写 exists 条件过滤实例
2020/05/20 Python
解决margin 外边距合并问题
2019/07/03 HTML / CSS
NFL墨西哥官方商店:Tienda NFL
2017/11/28 全球购物
Nip + Fab官网:英国美容品牌
2019/08/26 全球购物
N:Philanthropy官网:美国洛杉矶基础款服装
2020/06/09 全球购物
C++的几个面试题附答案
2016/08/03 面试题
圣诞节活动策划方案
2014/06/09 职场文书
乡镇司法所2015年度工作总结
2015/10/14 职场文书
家庭教育教师培训学习体会
2016/01/14 职场文书
为自由献出你的心脏!「进击的巨人展 FINAL」2022年6月在台开展
2022/04/13 日漫