基于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 相关文章推荐
jQuery 美元符冲突的解决方法
Mar 28 Javascript
jQuery中bind,live,delegate与one方法的用法及区别解析
Dec 30 Javascript
javascript每日必学之运算符
Feb 16 Javascript
ES6记录异步函数的执行时间详解
Aug 31 Javascript
javascript事件捕获机制【深入分析IE和DOM中的事件模型】
Dec 15 Javascript
ES6新特性之字符串的扩展实例分析
Apr 01 Javascript
vue页面加载闪烁问题的解决方法
Mar 28 Javascript
ES6入门教程之变量的解构赋值详解
Apr 13 Javascript
JavaScript实现打砖块游戏
Feb 25 Javascript
JS出现404错误原理及解决方案
Jul 01 Javascript
javascript如何使用函数random来实现课堂随机点名方法详解
Jul 28 Javascript
JavaScript实现缓动动画
Nov 25 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
PHP 开发环境配置(测试开发环境)
2010/04/28 PHP
php设计模式 Factory(工厂模式)
2011/06/26 PHP
利用PHP实现智能文件类型检测的实现代码
2011/08/02 PHP
Yii操作数据库的3种方法
2014/03/11 PHP
linux下为php添加iconv模块的方法
2016/02/28 PHP
js动态调用css属性的小规律及实例说明
2013/12/28 Javascript
JQuery插入DOM节点的方法
2015/06/11 Javascript
jQuery+Ajax+PHP弹出层异步登录效果(附源码下载)
2016/05/27 Javascript
bootstrap监听滚动实现头部跟随滚动
2016/11/08 Javascript
js实现密码强度检验
2017/01/15 Javascript
easyui关于validatebox实现多重规则验证的方法(必看)
2017/04/12 Javascript
ES6新特性二:Iterator(遍历器)和for-of循环详解
2017/04/20 Javascript
详解angularjs中如何实现控制器和指令之间交互
2017/05/31 Javascript
vue element-ui 绑定@keyup事件无效的解决方法
2018/03/09 Javascript
JS实现方形抽奖效果
2018/08/27 Javascript
vue.js高德地图实现热点图代码实例
2019/04/18 Javascript
在Vue中使用HOC模式的实现
2020/08/23 Javascript
[02:28]DOTA2 2015国际邀请赛中国区预选赛首日现场百态
2015/05/26 DOTA
[01:22]DOTA2神秘商店携大量周边降临完美大师赛
2017/11/07 DOTA
[52:39]完美世界DOTA2联赛PWL S3 CPG vs Forest 第一场 12.16
2020/12/17 DOTA
[01:06:19]DOTA2-DPC中国联赛定级赛 LBZS vs SAG BO3第二场 1月8日
2021/03/11 DOTA
python连接oracle数据库实例
2014/10/17 Python
pandas读取CSV文件时查看修改各列的数据类型格式
2019/07/07 Python
解决python-docx打包之后找不到default.docx的问题
2020/02/13 Python
django 实现简单的插入视频
2020/04/07 Python
Pycharm添加虚拟解释器报错问题解决方案
2020/10/13 Python
Shop Apotheke瑞士:您的健康与美容网上商店
2019/10/09 全球购物
医学生求职自荐信
2013/10/25 职场文书
夜不归宿检讨书
2014/02/25 职场文书
电子商务助理求职自荐信
2014/04/10 职场文书
销售员态度差检讨书
2014/10/26 职场文书
2014年个人工作总结报告
2014/11/27 职场文书
学校食堂管理制度
2015/08/04 职场文书
党员反邪教心得体会
2016/01/15 职场文书
修改MySQL的数据库引擎为INNODB的方法
2021/05/26 MySQL
Python实现数据的序列化操作详解
2022/07/07 Python