原生JS实现平滑回到顶部组件


Posted in Javascript onMarch 16, 2016

返回顶部组件是一种极其常见的网页功能,需求简单:页面滚动一定距离后,显示返回顶部的按钮,点击该按钮可以将滚动条滚回至页面开始的位置。

实现思路也很容易,只要改变document.documentElement.scrollTop或document.body.scrollTop的值即可。

本文抛弃所有加速减速的酷炫效果,回归软件的本质,提供一个最简洁的实现,只追求实用性,不追求所谓的用户体验,效果如下

原生JS实现平滑回到顶部组件

由于思路跟代码都很简单,所以就直接贴出实现细节了:

var BackTop = function (domE,distance) {
if (!domE) return;
var _onscroll = window.onscroll,
_onclick = domE.onclick;
window.onscroll = throttle(function(){
typeof _onscroll === 'function' && _onscroll.apply(this, arguments);
toggleDomE();
},100);
domE.onclick = function(){
typeof _onclick === 'function' && _onclick.apply(this, arguments);
document.documentElement.scrollTop = 0;
document.body.scrollTop = 0;
};
function toggleDomE(){
domE.style.display = (document.documentElement.scrollTop || document.body.scrollTop) > (distance || 500) ? 'block' : 'none';
}
function throttle(func, wait) {
var timer = null;
return function () {
var self = this, args = arguments;
if (timer) clearTimeout(timer);
timer = setTimeout(function () {
return typeof func === 'function' && func.apply(self, args);
}, wait);
}
}
};

调用方式:

<script>
new BackTop(document.getElementById('backTop'))
</script>

之所以写这篇博客,弄这么个简单的东西,有两个方面的原因:

1)这段时间一直在手写一些常见的简单组件,这算是一个简单中更简单的一个,为了让这系列的博客更加完整,所以把这个组件补充了进来;

2)我想表达自己在工作过程中的一个观点:就是不要过渡用用户体验来装饰你的软件或者说产品,用户体验这个东西说白了就是两个词,一个是好印象,第二个就是好玩,但这并不是产品开发运营的最终目的,你把东西做的再漂亮,产品的核心价值和服务做的不够的话,就算把返回顶部这种功能做成超级无敌的火箭也是徒劳无功的。做前端开发,得锻炼点控制产品经理瞎提用户体验功能的度,以这个组件来说,我认为做加速或减速效果都是多余的,既增加开发时间,又耽误用户使用的时间,抛弃自己心中那点对技术玩弄的固执,可以让自己的工作做的更加完美。

下面给大家分享几种常用网页返回顶部代码

一、使用HTML的锚标记最简单了

但是唯一的缺点就是样式不怎么样,会显示这个锚标记。

<aname="top"id="top"></a>

放置位置在<body>标签之后随便找个地方放都可以,只要靠近顶部即可。

页面底部放置:

<ahref="#top"target="_self">返回顶部</a>

二、使用Javascript Scroll函数返回顶部

scrooll函数用来控制滚动条的位置,有两种很简单的实现方式:

方式1(推荐:简单方便):

<ahref="javascript:scroll(0,0)">返回顶部</a>

scroll第一个参数是水平位置,第二个参数是垂直位置,比如要想定位在垂直50像素处,改成scroll(0,50)就可以了。

方式2(注重效果:缓慢向上):

本方式是渐进式返回顶部,要好看一些,代码如下:

functionpageScroll() {window.scrollBy(0,-10);scrolldelay=setTimeout('pageScroll()',100);}<ahref="pageScroll();">返回顶部</a>

这样就会动态返回顶部,不过虽然返回到顶部但是代码仍在运行,还需要在pageScroll函数加一句给停止掉。

if(document.documentElement.scrollTop==0)clearTimeout(scrolldelay);

三、使用Onload加上scroll功能实现动态返回顶部

首先在网页body标签结束之前加上:

<divid="gotop">返回顶部</div>

2、再调用以下JS脚本部分:

BackTop=function(btnId){varbtn=document.getElementById(btnId);vard=document.documentElement;window.onscroll=set;btn.onclick=function(){btn.style.display="none";window.onscroll=null;this.timer=setInterval(function(){d.scrollTop-=Math.ceil(d.scrollTop*0.1);if(d.scrollTop==0)clearInterval(btn.timer,window.onscroll=set);},10);};functionset(){btn.style.display=d.scrollTop?'block':"none"}};BackTop('gotop');

这些可以放到网页中中,也可以独立存成一个js文件,比如gotop.js,再通过以下形式:

<scriptsrc="/js/gotop.js"type=text/javascript></script>

来调用,当然了位置最好放在“返回顶部”标签的下面,该调用方法已假设文件路径为JS,放在其它位置请根据实际修改。

Javascript 相关文章推荐
jQuery 过滤方法filter()选择具有特殊属性的元素
Jun 15 Javascript
JavaScript Math.ceil 方法(对数值向上取整)
Jan 09 Javascript
javascript单例模式的简单实现方法
Jul 25 Javascript
JavaScript生成SQL查询表单的方法
Aug 13 Javascript
详解javascript高级定时器
Dec 31 Javascript
给easyui的datebox控件添加清空按钮的实现方法
Nov 09 Javascript
前端自动化开发之Node.js的环境搭建教程
Apr 01 Javascript
浅析Vue项目中使用keep-Alive步骤
Jul 27 Javascript
Nuxt.js开启SSR渲染的教程详解
Nov 30 Javascript
postman自定义函数实现 时间函数的思路详解
Apr 17 Javascript
Vue如何基于vue-i18n实现多国语言兼容
Jul 17 Javascript
vue实现折线图 可按时间查询
Aug 21 Javascript
基于jquery实现百度新闻导航菜单滑动动画
Mar 15 #Javascript
dedecms页面如何获取会员状态的实例代码
Mar 15 #Javascript
JavaScript隐式类型转换
Mar 15 #Javascript
JavaScript正则表达式匹配 div  style标签
Mar 15 #Javascript
Angularjs整合微信UI(weui)
Mar 15 #Javascript
一步步教大家编写酷炫的导航栏js+css实现
Mar 14 #Javascript
原生javascript+css3编写的3D魔方动画旋扭特效
Mar 14 #Javascript
You might like
php数组对百万数据进行排除重复数据的实现代码
2010/06/08 PHP
php XPath对XML文件查找及修改实现代码
2011/07/27 PHP
PHP实现支持GET,POST,Multipart/form-data的HTTP请求类
2014/09/24 PHP
教你识别简单的免查杀PHP后门
2015/09/13 PHP
php反射类ReflectionClass用法分析
2016/05/12 PHP
JQuery Dialog的内存泄露问题解决方法
2010/06/18 Javascript
js中的this关键字详解
2013/09/25 Javascript
ie浏览器使用js导出网页到excel并打印
2014/03/11 Javascript
JS上传组件FileUpload自定义模板的使用方法
2016/05/10 Javascript
JSON字符串和对象相互转换实例分析
2016/06/16 Javascript
js获取当前时间(昨天、今天、明天)
2016/11/23 Javascript
JavaScript提高加载和执行效率的方法
2017/02/03 Javascript
JavaScript中在光标处插入添加文本标签节点的详细方法
2017/03/22 Javascript
纯js实现画一棵树的示例
2017/09/05 Javascript
Thinkjs3新手入门之如何使用静态资源目录
2017/12/06 Javascript
4个顶级开源JavaScript图表库
2018/09/29 Javascript
layer实现登录弹框,登录成功后关闭弹框并调用父窗口的例子
2019/09/11 Javascript
[05:06]2017亚洲邀请赛DAC回顾片
2017/04/19 DOTA
Python 列表(List) 的三种遍历方法实例 详解
2017/04/15 Python
python实现字符串和字典的转换
2018/09/29 Python
Python定时发送消息的脚本:每天跟你女朋友说晚安
2018/10/21 Python
python实现对任意大小图片均匀切割的示例
2018/12/05 Python
彻底理解Python中的yield关键字
2019/04/01 Python
华为2019校招笔试题之处理字符串(python版)
2019/06/25 Python
Python List列表对象内置方法实例详解
2019/10/22 Python
python编写微信公众号首图思路详解
2019/12/13 Python
Ralph Lauren意大利官方网站:时尚界最负盛名的品牌之一
2018/10/18 全球购物
Python如何定义一个函数
2015/09/01 面试题
回门宴新郎答谢词
2014/01/12 职场文书
干部鉴定材料
2014/05/18 职场文书
妇联领导班子剖析材料
2014/08/21 职场文书
党的群众路线教育实践活动对照检查材料(教师)
2014/09/24 职场文书
党员教师学习党的群众路线教育实践活动心得体会
2014/10/31 职场文书
开国大典观后感
2015/06/04 职场文书
小程序教您怎样你零成本推广获取数万用户的方法
2019/07/30 职场文书
CSS3点击按钮圆形进度打钩效果的实现代码
2021/03/30 HTML / CSS