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 相关文章推荐
js判断当页面无法回退时关闭网页否则就history.go(-1)
Aug 07 Javascript
浅谈JavaScript数据类型
Mar 03 Javascript
JavaScript中的return语句简单介绍
Dec 07 Javascript
js模仿java的Map集合详解
Jan 06 Javascript
给angular加上动画效遇到的问题总结
Feb 17 Javascript
深入理解jquery中extend的实现
Dec 22 Javascript
webpack实现热加载自动刷新的方法
Jul 30 Javascript
Angular2管道Pipe及自定义管道格式数据用法实例分析
Nov 29 Javascript
在angular 6中使用 less 的实例代码
May 13 Javascript
js实现轮播图效果 纯js实现图片自动切换
Aug 09 Javascript
关于JavaScript中异步/等待的用法与理解
Nov 18 Javascript
详解JSON.parse和JSON.stringify用法
Feb 18 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
PHP图片处理之图片背景、画布操作
2014/11/19 PHP
用Javascript同时提交多个Web表单的方法
2009/12/26 Javascript
js parsefloat parseint 转换函数
2010/01/21 Javascript
Knockout数组(observable)使用详解示例
2013/11/15 Javascript
用jquery等比例控制图片宽高的具体实现
2014/01/28 Javascript
JS实现判断碰撞的方法
2015/02/11 Javascript
JavaScript中的Math.LOG2E属性使用详解
2015/06/14 Javascript
JavaScript清空数组元素的两种方法简单比较
2015/07/10 Javascript
jQuery移动端日期(datedropper)和时间(timedropper)选择器附源码下载
2016/04/19 Javascript
BootStrap3中模态对话框的使用
2017/01/06 Javascript
JavaScript解析JSON格式数据的方法示例
2017/01/24 Javascript
js实现返回顶部效果
2017/03/10 Javascript
微信小程序动态生成二维码的实现代码
2018/07/25 Javascript
vue实现添加与删除图书功能
2018/10/07 Javascript
@angular前端项目代码优化之构建Api Tree的方法
2018/12/24 Javascript
JS使用canvas中的measureText方法测量字体宽度示例
2019/02/02 Javascript
小程序怎样让wx.navigateBack更好用的方法实现
2019/11/01 Javascript
零基础写python爬虫之打包生成exe文件
2014/11/06 Python
使用Python的内建模块collections的教程
2015/04/28 Python
python manage.py runserver流程解析
2019/11/08 Python
python实现的批量分析xml标签中各个类别个数功能示例
2019/12/30 Python
贝玲妃美国官方网站:Benefit美国
2016/08/28 全球购物
世界上最好的威士忌和烈性酒购买网站:The Whisky Exchange
2016/11/20 全球购物
New Balance英国官方网站:始于1906年,百年慢跑品牌
2016/12/07 全球购物
孤独星球出版物:Lonely Planet Publications
2018/03/17 全球购物
美国最大婚纱连锁店运营商:David’s Bridal
2019/03/12 全球购物
戴尔新西兰官网:Dell New Zealand
2020/01/07 全球购物
Wolford法国官网:奥地利奢侈内衣品牌
2020/08/11 全球购物
高中学生干部学习的自我评价
2014/02/21 职场文书
2014年城市管理工作总结
2014/12/02 职场文书
前台岗位职责范本
2015/04/16 职场文书
《抽屉原理》教学反思
2016/02/20 职场文书
2019最新版股权转让及委托持股协议书范本
2019/08/07 职场文书
python中的plt.cm.Paired用法说明
2021/05/31 Python
如何使用 resize 实现图片切换预览功能
2021/08/23 HTML / CSS
vue3使用vuedraggable实现拖拽功能
2022/04/06 Vue.js