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 兼容所有浏览器的DOM扩展功能
Aug 01 Javascript
jquery插件lazyload.js延迟加载图片的使用方法
Feb 19 Javascript
js实现点击文本框显示日期选择器特效代码分享
May 21 Javascript
js实现简单的网页换肤效果
Jan 18 Javascript
vue2.0 移动端实现下拉刷新和上拉加载更多的示例
Apr 23 Javascript
详解vue2.0 资源文件assets和static的区别
Nov 27 Javascript
17道题让你彻底理解JS中的类型转换
Aug 08 Javascript
vue学习之Vue-Router用法实例分析
Jan 06 Javascript
JavaScript实现Tab标签页切换的最简便方式(4种)
Jun 28 Javascript
Vue解决echart在element的tab切换时显示不正确问题
Aug 03 Javascript
详解Vue 的异常处理机制
Nov 30 Vue.js
什么是SOLID
Mar 24 Javascript
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
如何将一个表单同时提交到两个地方处理
2006/10/09 PHP
php 批量生成html,txt文件的实现代码
2013/06/26 PHP
深入解析PHP中foreach语句控制数组循环的用法
2015/11/30 PHP
php封装json通信接口详解及实例
2017/03/07 PHP
PHP正则之正向预查与反向预查讲解与实例
2020/04/06 PHP
javascript十个最常用的自定义函数(中文版)
2009/09/07 Javascript
十个优秀的Ajax/Javascript实例网站收集
2010/03/31 Javascript
基于JQuery的简单实现折叠菜单代码
2010/09/15 Javascript
javascript中为某个元素指定事件的三种方式
2014/08/07 Javascript
用JavaScript实现PHP的urlencode与urldecode函数
2015/08/13 Javascript
Node.js模块封装及使用方法
2016/03/06 Javascript
Svg.js实例教程及使用手册详解(一)
2016/05/16 Javascript
vue项目中v-model父子组件通信的实现详解
2017/12/10 Javascript
详解如何用模块化的方式写vuejs
2017/12/16 Javascript
Angular6 正则表达式允许输入部分中文字符
2018/09/10 Javascript
vue组件中的样式属性scoped实例详解
2018/10/30 Javascript
Vue 中的受控与非受控组件的实现
2018/12/17 Javascript
利用百度echarts实现图表功能简单入门示例【附源码下载】
2019/06/10 Javascript
es6 for循环中let和var区别详解
2020/01/12 Javascript
javascript前端实现多视频上传
2020/12/13 Javascript
[01:56]《DOTA2》中文配音CG
2013/04/22 DOTA
[06:16]第十四期-国士无双绝地翻盘之撼地神牛
2014/06/24 DOTA
[10:53]2018DOTA2国际邀请赛寻真——EG
2018/08/11 DOTA
[01:59]翻天覆地,因你而变,7.20版本地图更新速览
2018/11/24 DOTA
详解在Python程序中自定义异常的方法
2015/10/16 Python
使用Python进行目录的对比方法
2018/11/01 Python
艺术家策划的室内设计:Curious Egg
2019/03/06 全球购物
Viking Direct爱尔兰:办公用品和家具
2019/11/21 全球购物
西班牙用户之间买卖视频游戏的平台:Wakkap
2020/03/21 全球购物
程序集与命名空间有什么不同
2014/07/25 面试题
如何写一个自定义标签
2012/12/28 面试题
安全生产先进个人材料
2014/02/06 职场文书
医院护士党的群众路线教育实践活动对照检查材料思想汇报
2014/10/04 职场文书
开展党的群众路线教育实践活动总结报告
2014/10/31 职场文书
2019年入党思想汇报
2019/03/25 职场文书
springboot实现string转json json里面带数组
2022/06/16 Java/Android