基于Javascript实现返回顶部按钮


Posted in Javascript onFebruary 29, 2016

一个网页内容一多, 就会分屏显示数据, 如果屏目很多, 用户访问的数据已经到了页面的底部, 这时候返回到顶部也是需要一点时间. 这样对用户体验来说, 可能就稍微逊了一点. 所以页面数据多的网页, 现在都会用一个"返回顶部"按钮来快速跳转到网页的顶部.
那现在我们就来实现这么一个功能.

这个页面我们就不写什么数据, 直接就加入一个a标签来作为返回顶部的按钮, 并给他一个class名称:top.

<a href="#" class="top">顶部</a>

然后设置其样式表:

body {
  height: 3000px;
}

.top {
  position: absolute;
  top: 120px;
  display: inline-block;
  width: 50px;
  height: 50px;
  line-height: 50px;
  text-decoration: none;
  text-align: center;
  background-color: #666666;
  color: #ffffff;
  right: 10px;
  transition: all 0.3s;
   visibility: hidden;
}
.top:hover {
  background-color: #ff3300;
}

这里body设定为3000的高度, 主要是让页面有滚动的效果. 按钮一般都是放在网页的右边靠下一点的位置. 这里我们通过position来设置.

我们还要分析一下, 当用户的访问的网页在页面的顶部时, 这个按钮肯定是不显示的. 所以我们这里用了visibility来控制按钮的显示与否.

界面很简单, 我们就先将就一下. 下面来分析JS的实现.

首先这个按钮是在整个网页的效果上, 因此监听滚动事件需要设置在整个窗口上. 因此,我们给window设置一个onscroll事件.

window.onscroll = function (e) {...}

在这个事件里我们来控制返回顶部按钮的上下位置, 和是否显示. 首先来完成上下位置的控制.

上下位置的控制, 我们肯定得计算scrollTop的高度, 以及网页单屏显示的高度. 当用户进入页面的时候, 我们默认给这个按钮放置在页面右中部位置. 这时候的计算是:

var n_half_height = window.screen.height / 2;

将这个值赋给按钮的top属性.

然后如果用户滚动的时候, 位置肯定是保持不变的, 这时候的计算应该是

var n_stop = e.target.scrollingElement.scrollTop; //获取scrollTop的高度
var n_top = n_stop + n_half_height;//得到位置

这是e 对象是onsroll里的参数event. 这里我使用的是谷歌浏览器.其他浏览器未测试. 如果需要兼容, 大家可以处理一下.
每滚动都得计算其高度, 所以这个应该是放入在onscroll事件中.然后,将这个值赋给按钮的top属性.

当然不要忘记一件事, 就是scrollTop为0的时候, 按钮不需要显示. 大于0的时候, 得让按钮显示. 前面讲过我们用visibility这个属性来控制的.这样代码就完整了.
Javascript完整代码

var ele_body = document.body;
var ele_top = document.getElementsByClassName("top")[0];
var n_half_height = window.screen.height / 2;
ele_top.style.top = n_half_height + "px";
window.onscroll = function (e) {
 var n_stop = e.target.scrollingElement.scrollTop;
 if (n_stop === 0 ) {
  ele_top.style.visibility = "hidden";
 }else {
  ele_top.style.visibility = "visible";
 }
 var n_top = n_stop + n_half_height ;
 ele_top.style.top = n_top + "px";
}

最后的效果展示:

基于Javascript实现返回顶部按钮

以上就是本文的全部内容,希望对大家的学习有所帮助。

Javascript 相关文章推荐
Javascript写了一个清除“logo1_.exe”的杀毒工具(可扫描目录)
Feb 09 Javascript
jQuery 通过事件委派一次绑定多种事件,以减少事件冗余
Jun 30 Javascript
javascript中scrollTop详解
Apr 13 Javascript
JavaScript清空数组元素的两种方法简单比较
Jul 10 Javascript
JS实现方向键切换输入框焦点的方法
Aug 19 Javascript
jQuery prototype冲突的2种解决方法(附demo示例下载)
Jan 21 Javascript
AngularJS入门教程之多视图切换用法示例
Nov 02 Javascript
bootstrap vue.js实现tab效果
Feb 07 Javascript
浅谈原生JS中的延迟脚本和异步脚本
Jul 12 Javascript
小程序实现分类页
Jul 12 Javascript
JavaScript常用工具函数大全
May 06 Javascript
解决VueCil代理本地proxytable无效报错404的问题
Nov 07 Javascript
JavaScript实现斗地主游戏的思路
Feb 29 #Javascript
jQuery取消特定的click事件
Feb 29 #Javascript
JavaScript+CSS实现的可折叠二级菜单实例
Feb 29 #Javascript
JS三级可折叠菜单实现方法
Feb 29 #Javascript
精通JavaScript的this关键字
May 28 #Javascript
javascript正则表达式总结
Feb 29 #Javascript
javascript计时器编写过程与实现方法
Feb 29 #Javascript
You might like
人大复印资料处理程序_查询篇
2006/10/09 PHP
探讨:如何编写PHP扩展
2013/06/13 PHP
CodeIgniter框架URL路由总结
2014/09/03 PHP
YII Framework框架教程之缓存用法详解
2016/03/14 PHP
php防止sql注入的方法详解
2017/02/20 PHP
ThinkPHP中调用PHPExcel的实现代码
2017/04/08 PHP
php数组遍历类与用法示例
2019/05/24 PHP
用JS剩余字数计算的代码
2008/07/03 Javascript
javascript 出生日期和身份证判断大全
2008/11/13 Javascript
jquery实现带单选按钮的表格行选中时高亮显示
2013/08/01 Javascript
window.print打印指定div指定网页指定区域的方法
2014/08/04 Javascript
JavaScript Window浏览器对象模型方法与属性汇总
2015/04/20 Javascript
基于JavaScript实现高德地图和百度地图提取行政区边界经纬度坐标
2016/01/22 Javascript
详解jQuery的Cookie插件
2016/11/23 Javascript
详解MVC如何使用开源分页插件(shenniu.pager.js)
2016/12/16 Javascript
jQuery实现搜索页面关键字的功能
2017/02/16 Javascript
koa上传excel文件并解析的实现方法
2018/08/09 Javascript
vue实现简单学生信息管理
2020/05/30 Javascript
JavaScript实现沿五角星形线摆动的小圆实例详解
2020/07/28 Javascript
[01:00:52]2018DOTA2亚洲邀请赛 4.4 淘汰赛 EG vs LGD 第一场
2018/04/05 DOTA
对Pycharm创建py文件时自定义头部模板的方法详解
2019/02/12 Python
Python使用paramiko操作linux的方法讲解
2019/02/25 Python
wxPython窗体拆分布局基础组件
2019/11/19 Python
Pytorch提取模型特征向量保存至csv的例子
2020/01/03 Python
python中def是做什么的
2020/06/10 Python
Python命名空间及作用域原理实例解析
2020/08/12 Python
CSS3实现内凹圆角的实例代码
2017/05/04 HTML / CSS
Nordgreen英国官网:斯堪的纳维亚设计师手表
2018/10/24 全球购物
最好的商品表达自己:Cafepress
2019/09/04 全球购物
remote接口和home接口主要作用
2013/05/15 面试题
办公自动化毕业生求职信
2014/03/09 职场文书
新员工试用期自我鉴定
2014/04/17 职场文书
幼儿教师师德师风演讲稿
2014/08/22 职场文书
2014年医德医风工作总结
2014/11/13 职场文书
爱心捐款活动总结
2015/05/09 职场文书
JVM上高性能数据格式库包Apache Arrow入门和架构详解(Gkatziouras)
2021/05/26 Servers