用原生js做个简单的滑动效果的回到顶部


Posted in Javascript onOctober 15, 2014

很多网页在下方都会放置一个“返回顶部”按钮,尤其是页面底部没有导航的网页,这样可以帮助访客重新找到导航或者重温一遍广告(想得真美)。随着近几年来 JavaScript 的应用日渐广泛,滑动效果无处不在,于是我也跟跟风,将返回顶部功能做成了滑动效果。后来为了更贴合物理特征, 改造做成了减速的滑动效果。

首先说一下原理吧,我们会获取滚动条到页面顶部的距离,然后上移一定的距离;再获取滚动条到页面顶部的距离,上移一定的距离(比上一次小一点);以此类推 ...

<script type="text/javascript"> 
/** 
* 回到页面顶部 
* @param acceleration 加速度 
* @param time 时间间隔 (毫秒) 
**/
function goTop(acceleration, time) { 
acceleration = acceleration || 0.1; 
time = time || 16; 

var x1 = 0; 
var y1 = 0; 
var x2 = 0; 
var y2 = 0; 
var x3 = 0; 
var y3 = 0; 

if (document.documentElement) { 
x1 = document.documentElement.scrollLeft || 0; 
y1 = document.documentElement.scrollTop || 0; 
} 
if (document.body) { 
x2 = document.body.scrollLeft || 0; 
y2 = document.body.scrollTop || 0; 
} 
var x3 = window.scrollX || 0; 
var y3 = window.scrollY || 0; 

// 滚动条到页面顶部的水平距离 
var x = Math.max(x1, Math.max(x2, x3)); 
// 滚动条到页面顶部的垂直距离 
var y = Math.max(y1, Math.max(y2, y3)); 

// 滚动距离 = 目前距离 / 速度, 因为距离原来越小, 速度是大于 1 的数, 所以滚动距离会越来越小 
var speed = 1 + acceleration; 
window.scrollTo(Math.floor(x / speed), Math.floor(y / speed)); 

// 如果距离不为零, 继续调用迭代本函数 
if(x > 0 || y > 0) { 
var invokeFunction = "goTop(" + acceleration + ", " + time + ")"; 
window.setTimeout(invokeFunction, time); 
} 
} 
</script>

document.documentElement.scrollTop, document.body.scrollTop, window.scrollY 其实都是一样的,但它们只在某些浏览器中起作用。至于那哪个在哪些浏览器起作用可以自己调试一下。

如何使用?

<a href="#" onclick="goTop();return false;">TOP</a>
Javascript 相关文章推荐
javascript string字符串优化问题
Jul 31 Javascript
Jquery实现仿新浪微博获取文本框能输入的字数代码
Feb 22 Javascript
javascript的渐进增强与平稳退化浅谈
Nov 12 Javascript
JS弹出层单纯的绝对定位居中示例代码
Feb 18 Javascript
ajax提交表单实现网页无刷新注册示例
May 08 Javascript
JQuery勾选指定name的复选框集合并显示的方法
May 18 Javascript
JS获取当前页面名称的简单实例
Aug 19 Javascript
Javascript中document.referrer隐藏来源的方法
Jan 16 Javascript
原生javascript上传图片带进度条【实例分享】
Apr 06 Javascript
Vue上传组件vue Simple Uploader的用法示例
Aug 25 Javascript
vue router demo详解
Oct 13 Javascript
JavaScript中arguments和this对象用法分析
Aug 08 Javascript
原生的html元素选择器类似jquery选择器
Oct 15 #Javascript
用原生JS获取CLASS对象(很简单实用)
Oct 15 #Javascript
通过JS动态创建一个html DOM元素并显示
Oct 15 #Javascript
javascript模拟实现ajax加载框实例
Oct 15 #Javascript
jquery幻灯片插件bxslider样式改进实例
Oct 15 #Javascript
微信分享的标题、缩略图、连接及描述设置方法
Oct 14 #Javascript
js实现select组件的选择输入过滤代码
Oct 14 #Javascript
You might like
基于ThinkPHP+uploadify+upload+PHPExcel 无刷新导入数据
2015/09/23 PHP
Laravel Validator 实现两个或多个字段联合索引唯一
2019/05/08 PHP
非常有用的40款jQuery 插件推荐(系列二)
2011/12/25 Javascript
Javascript学习笔记之 函数篇(二) : this 的工作机制
2014/06/24 Javascript
jQuery实现预加载图片的方法
2015/03/17 Javascript
javascript入门教程基础篇
2015/11/16 Javascript
javascript巧用eval函数组装表单输入项为json对象的方法
2015/11/25 Javascript
理解javascript正则表达式
2016/03/08 Javascript
举例讲解如何判断JavaScript中对象的类型
2016/04/22 Javascript
JavaScript事件学习小结(三)js事件对象
2016/06/09 Javascript
AngularJS基础 ng-if 指令用法
2016/08/01 Javascript
AngularJS实现标签页的两种方式
2016/09/05 Javascript
JavaScript实现隐藏省略文字效果的方法
2017/04/27 Javascript
Vue.js进行查询操作的实例详解
2017/08/25 Javascript
原生JS实现$.param() 函数的方法
2018/08/10 Javascript
jQuery实现的隔行变色功能【案例】
2019/02/18 jQuery
仿vue-cli搭建属于自己的脚手架的方法步骤
2019/04/17 Javascript
layui递归实现动态左侧菜单
2019/07/26 Javascript
js 实现 list转换成tree的方法示例(数组到树)
2019/08/18 Javascript
jquery更改元素属性attr()方法操作示例
2020/05/22 jQuery
JS前端基于canvas给图片添加水印
2020/11/11 Javascript
Python编写检测数据库SA用户的方法
2014/07/11 Python
python实现快速排序的示例(二分法思想)
2018/03/12 Python
详解PyCharm配置Anaconda的艰难心路历程
2018/08/13 Python
python 实现敏感词过滤的方法
2019/01/21 Python
django中账号密码验证登陆功能的实现方法
2019/07/15 Python
python传到前端的数据,双引号被转义的问题
2020/04/03 Python
如何Tkinter模块编写Python图形界面
2020/10/14 Python
英国顶级珠宝品牌之家:John Greed
2018/06/09 全球购物
工程材料采购方案
2014/05/18 职场文书
秋季校运会广播稿100字
2014/09/18 职场文书
2015年部门工作总结范文
2015/03/31 职场文书
2016年“5.12”护士节致辞
2015/07/31 职场文书
​(迎国庆)作文之我爱我的祖国
2019/09/19 职场文书
Java spring单点登录系统
2021/09/04 Java/Android
Python Django模型详解
2021/10/05 Python