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 style 中visibility和display之间的区别
Jan 22 Javascript
Fixie.js 自动填充内容的插件
Jun 28 Javascript
Javascript 完美运动框架(逐行分析代码,让你轻松了运动的原理)
Jan 23 Javascript
jQuery EasyUI封装简化操作
Sep 18 Javascript
ES6中数组array新增方法实例总结
Nov 07 Javascript
小程序自定义组件实现城市选择功能
Jul 18 Javascript
深入浅出理解JavaScript闭包的功能与用法
Aug 01 Javascript
layui-laydate时间日历控件使用方法详解
Nov 15 Javascript
使用vscode快速建立vue模板过程详解
Oct 10 Javascript
js将日期格式转换为YYYY-MM-DD HH:MM:SS
Sep 18 Javascript
原生JavaScript实现弹幕组件的示例代码
Oct 12 Javascript
在Vue中使用Echarts可视化库的完整步骤记录
Nov 18 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
PHP4实际应用经验篇(5)
2006/10/09 PHP
php5新改动之短标记启用方法
2008/09/11 PHP
php遍历目录输出目录及其下的所有文件示例
2014/01/27 PHP
纯PHP生成的一个树叶图片画图例子
2014/04/16 PHP
PHP实现的比较完善的购物车类
2014/12/02 PHP
PHP实现163邮箱自动发送邮件
2016/03/29 PHP
php curl中gzip的压缩性能测试实例分析
2016/11/08 PHP
JS 文字符串转换unicode编码函数
2009/05/30 Javascript
编写可维护面向对象的JavaScript代码[翻译]
2011/02/12 Javascript
关于hashchangebroker和statehashable的补充文档
2011/08/08 Javascript
JS实现仿百度输入框自动匹配功能的示例代码
2014/02/19 Javascript
js简单实现Select互换数据的方法
2015/08/17 Javascript
JS数组操作(数组增加、删除、翻转、转字符串、取索引、截取(切片)slice、剪接splice、数组合并)
2016/05/20 Javascript
瀑布流的实现方式(原生js+jquery+css3)
2020/06/28 Javascript
javascript跨域请求包装函数与用法示例
2016/11/03 Javascript
对于Javascript 执行上下文的全面了解
2017/09/05 Javascript
javascript中的隐式调用
2018/02/10 Javascript
vue-cli脚手架的安装教程图解
2018/09/02 Javascript
详解Node.js异步处理的各种写法
2019/06/09 Javascript
axios如何利用promise无痛刷新token的实现方法
2019/08/27 Javascript
OpenLayer学习之自定义测量控件
2020/09/28 Javascript
Python Deque 模块使用详解
2014/07/04 Python
Go/Python/Erlang编程语言对比分析及示例代码
2018/04/23 Python
python和php哪个更适合写爬虫
2020/06/22 Python
关于Python错误重试方法总结
2021/01/03 Python
HTML5 video 事件应用示例
2014/09/11 HTML / CSS
香港钟表珠宝首饰商城:OneMallTime网摩间
2016/10/14 全球购物
高中生毕业学习总结的自我评价
2013/11/14 职场文书
家长学校实施方案
2014/03/15 职场文书
2014年党课学习心得体会
2014/07/08 职场文书
入股合作协议书
2014/10/12 职场文书
员工评语范文
2014/12/31 职场文书
2015年社会实践个人总结
2015/03/06 职场文书
企业廉洁教育心得体会
2016/01/20 职场文书
python实现Thrift服务端的方法
2021/04/20 Python
Python使用MapReduce进行简单的销售统计
2022/04/22 Python