原生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中将函数赋值给变量的调用方法
Mar 23 Javascript
JS编程小常识很有用
Nov 26 Javascript
jQuery+slidereveal实现的面板滑动侧边展出效果
Mar 14 Javascript
JavaScript保存并运算页面中数字类型变量的写法
Jul 06 Javascript
JS制作类似选项卡切换的年历
Dec 03 Javascript
bootstrap模态框实现拖拽效果
Dec 14 Javascript
理解Angular的providers给Http添加默认headers
Jul 04 Javascript
微信小程序实现倒计时60s获取验证码
Apr 17 Javascript
详解让sublime text3支持Vue语法高亮显示的示例
Sep 29 Javascript
ES6 javascript中class静态方法、属性与实例属性用法示例
Oct 30 Javascript
jQuery实现基本淡入淡出效果的方法详解
Sep 05 jQuery
vue 解决provide和inject响应的问题
Nov 12 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入门的学习方法
2007/01/02 PHP
Look And Say 序列php实现代码
2011/05/22 PHP
PHP中使用unset销毁变量并内存释放问题
2012/07/05 PHP
解析PHP的session过期设置
2013/06/29 PHP
PHP中include与require使用方法区别详解
2013/10/19 PHP
Thinkphp 空操作、空控制器、命名空间(详解)
2017/05/05 PHP
jquery 框架使用教程 AJAX篇
2009/10/11 Javascript
jQuery插件AjaxFileUpload实现ajax文件上传
2016/05/05 Javascript
js控件Kindeditor实现图片自动上传功能
2020/07/20 Javascript
JS焦点图,JS 多个页面放多个焦点图的实例
2016/12/08 Javascript
jQuery中页面返回顶部的方法总结
2016/12/30 Javascript
xmlplus组件设计系列之下拉刷新(PullRefresh)(6)
2017/05/03 Javascript
JavaScript链式调用实例浅析
2018/12/19 Javascript
vue elementUI使用tabs与导航栏联动
2019/06/21 Javascript
详解Angular Karma测试的持续集成实践
2019/11/15 Javascript
JavaScript实现跟随鼠标移动的盒子
2021/01/28 Javascript
[04:56]经典回顾:前Ehome 与 前LGD
2015/02/26 DOTA
在arcgis使用python脚本进行字段计算时是如何解决中文问题的
2015/10/18 Python
python dataframe常见操作方法:实现取行、列、切片、统计特征值
2018/06/09 Python
Python3获取电脑IP、主机名、Mac地址的方法示例
2019/04/11 Python
Python获取基金网站网页内容、使用BeautifulSoup库分析html操作示例
2019/06/04 Python
Python for循环通过序列索引迭代过程解析
2020/02/07 Python
Python IDE环境之 新版Pycharm安装详细教程
2020/03/05 Python
django model 条件过滤 queryset.filter(**condtions)用法详解
2020/05/20 Python
python里反向传播算法详解
2020/11/22 Python
美国购物网站:Clickhere2shop
2021/01/28 全球购物
文明学生事迹材料
2014/01/29 职场文书
主管竞聘书范文
2014/03/31 职场文书
新闻编辑专业自荐信
2014/07/02 职场文书
2014年科室工作总结范文
2014/12/19 职场文书
旷课检讨书
2015/01/26 职场文书
2015年七夕情人节感言
2015/08/03 职场文书
优秀党员主要事迹范文
2015/11/05 职场文书
什么是求职信?求职信应包含哪些内容?
2019/08/14 职场文书
粗暴解决CUDA out of memory的问题
2021/05/22 Python
漫画《尖帽子的魔法工坊》宣布动画化
2022/04/06 日漫