jQuery中页面返回顶部的方法总结


Posted in Javascript onDecember 30, 2016

当页面过长时,通常会在页面下方有一个返回顶部的button,总结一下,大概三种实现方法,下面说下各方法及优缺点。

方法一 锚点定位

<a href="#" class="top" id="top">返回?部</a>

这种方法设置方便,但缺点是会刷新页面(我是在同事的乐视手机上发现的)。

方法二 window.scrollTo(x,y)

<a href="javascript:scrollTo(0,0)" class="top" id="top">返回?部</a>

这种方法也很方便,并且不会刷新页面,缺点是没有滚动效果。

scrollTo接收的参数用来定位视口左上角在整个滚动内容区域的坐标,比如我设置scrollTo(100,100),就是让滚动内容的坐标(100,100)的点处在视口的左上角。

方法三 设置带有动画效果的滚动

原生方法

/* html部分 */
<body>
<div></div>
<div></div>
<div></div>
<div></div>
<div></div>
<div></div>
<div></div>
<div></div>
<div></div>
<a href="javascript:;" class="top" id="top">返回?部</a>
</body>
<style>
/* css部分 */
div {
  height: 150px;
}
div:nth-child(odd) {
  background-color: #8ae238;
}
div:nth-child(even) {
  background-color: #66d9ef;
}
.top {
  position: fixed;
  right: 50px;
  bottom: 50px;
  display: block;
  width: 50px;
  height: 50px;
  font-size: 20px;
  background-color: white;
  display: none;
}
</style>
<script>
/* js代码 */
  var topBtn = document.getElementById('top');
  // 获取视窗高度
  var winHeight = document.documentElement.clientHeight;
  window.onscroll = function () {
    // 获取页面向上滚动距离,chrome浏览器识别document.body.scrollTop,而火狐识别document.documentElement.scrollTop,这里做了兼容处理
    var toTop = document.documentElement.scrollTop || document.body.scrollTop;
    // 如果滚动超过一屏,返回顶部按钮出现,反之隐藏
    if(toTop>=winHeight){
      topBtn.style.display = 'block';
    }else {
      topBtn.style.display = 'none';
    }
  }
  topBtn.onclick=function () {
    var timer = setInterval(function () {
      var toTop = document.documentElement.scrollTop || document.body.scrollTop;
      // 判断是否到达顶部,到达顶部停止滚动,没到达顶部继续滚动
      if(toTop == 0){
        clearInterval(timer);
      }else {
        // 设置滚动速度
        var speed = Math.ceil(toTop/5);
        // 页面向上滚动
        document.documentElement.scrollTop=document.body.scrollTop=toTop-speed;
      }
    },50);
  }
</script>

大概的思路就是:

为window绑定scroll事件,监听页面滚动距离,当超过一屏高度时,显示返回顶部的按钮

为按钮绑定点击事件,返回顶部的方法就是获取页面滚动的距离,然后计算步长,这里采用滚动距离除以5的方式,滚动速度由快到慢。这里使用定时器控制滚动的频率,建议设置较小一点的值,如果时间间隔过大会有‘跳帧'的感觉。
这种方法优点是有了动画效果,只是实现起来比较麻烦,下面介绍一下jQuery方法。

jQuery方法

jQuery方法只是在js代码部分不同,具体代码如下

<script>
/* js代码 */
$(window).on('scroll', function () {
  // 判断显示还是隐藏按钮
  if($(this).scrollTop()>=$(this).height()){
    $('#top').fadeIn('slow');
  }else {
    $('#top').fadeOut('slow');
  }
});
$('#top').on('click',function () {
  // 设置滚动动画,这里注意使用的是$('body')不是$(window)
  $('body').animate({scrollTop:'0'},500);
});
</script>

jQuery方法的优点是方便,而且动画效果比较流畅。

这里需要注意设置animate方法时使用的是jQuery封装的body对象而不是window对象,因为我们是要设置body的scrollTop属性。

总结

三个方法各有优劣,不过总体来讲,jQuery的方法更适合大多数场景。

以上所述是小编给大家介绍的jQuery中页面返回顶部的方法总结,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Javascript 相关文章推荐
JavaScript 注册事件代码
Jan 27 Javascript
javascript实现日历控件(年月日关闭按钮)
Dec 12 Javascript
标题过长使用javascript按字节截取字符串
Apr 24 Javascript
JavaScript创建对象的七种方式全面总结
Aug 21 Javascript
基于DOM节点删除之empty和remove的区别(详解)
Sep 11 Javascript
详解angular2.x创建项目入门指令
Oct 11 Javascript
在webstorm开发微信小程序之使用阿里自定义字体图标的方法
Nov 15 Javascript
微信小程序模板template简单用法示例
Dec 04 Javascript
记一次Vue.js混入mixin的使用(分权限管理页面)
Apr 17 Javascript
fastadmin中调用js的方法
May 14 Javascript
jQuery 动态粒子效果示例代码
Jul 07 jQuery
vue route新窗口跳转页面并且携带与接收参数
Apr 10 Vue.js
jQuery中select与datalist制作下拉菜单时的区别浅析
Dec 30 #Javascript
JS实现全屏的四种写法
Dec 30 #Javascript
js设置文字颜色的方法示例
Dec 30 #Javascript
Node.js的Mongodb使用实例
Dec 30 #Javascript
jQuery实现的仿百度,仿谷歌搜索下拉框效果示例
Dec 30 #Javascript
原生JS实现图片左右轮播
Dec 30 #Javascript
零基础轻松学JavaScript闭包
Dec 30 #Javascript
You might like
php从身份证获取性别和出生年月
2017/02/09 PHP
PHP使用redis消息队列发布微博的方法示例
2017/06/22 PHP
PHP进阶学习之Geo的地图定位算法详解
2019/06/19 PHP
JavaScript代码应该放在HTML代码哪个位置比较好?
2014/10/16 Javascript
JavaScript设计模式之装饰者模式介绍
2014/12/28 Javascript
NodeJs中的VM模块详解
2015/05/06 NodeJs
使用jQuery获取data-的自定义属性
2015/11/10 Javascript
js自定义回调函数
2015/12/13 Javascript
学习JavaScript设计模式之状态模式
2016/01/08 Javascript
Kendo Grid editing 自定义验证报错提示的解决方法
2016/11/18 Javascript
json2.js 入门教程之使用方法与实例分析
2017/09/14 Javascript
详解从零搭建 vue2 vue-router2 webpack3 工程
2017/11/22 Javascript
微信小程序scroll-x失效的完美解决方法
2018/07/18 Javascript
Vue动态路由缓存不相互影响的解决办法
2019/02/19 Javascript
只有 20 行的 JavaScript 模板引擎实例详解
2020/05/11 Javascript
python分析nignx访问日志脚本分享
2015/02/26 Python
用Python计算三角函数之acos()方法的使用
2015/05/15 Python
详解使用pymysql在python中对mysql的增删改查操作(综合)
2017/01/18 Python
基于python时间处理方法(详解)
2017/08/14 Python
Django自定义manage命令实例代码
2018/02/11 Python
使用EduBlock轻松学习Python编程
2018/10/08 Python
Django 实现外键去除自动添加的后缀‘_id’
2019/11/15 Python
如何解决cmd运行python提示不是内部命令
2020/07/01 Python
Python3+Django get/post请求实现教程详解
2021/02/16 Python
解决Pyinstaller打包软件失败的一个坑
2021/03/04 Python
美国男装连锁零售商:Men’s Wearhouse
2016/10/14 全球购物
德国网上药房:Apotal
2017/04/04 全球购物
照片礼物和装饰:MyPhoto
2019/11/02 全球购物
高中生活自我鉴定
2014/01/18 职场文书
个人银行贷款担保书
2014/04/01 职场文书
实验室的标语
2014/06/20 职场文书
关于爱国的标语
2014/06/24 职场文书
社区四风存在问题及整改措施
2014/10/26 职场文书
2014年乡镇党建工作总结
2014/11/11 职场文书
面试感谢信范文
2015/01/22 职场文书
学习弘扬焦裕禄精神心得体会
2016/01/23 职场文书