用原生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 相关文章推荐
jquery通过closest选择器修改上级元素的方法
Mar 17 Javascript
JavaScript列表框listbox全选和反选的实现方法
Mar 18 Javascript
JavaScript动态创建form表单并提交的实现方法
Dec 10 Javascript
JavaScript基本语法学习教程
Jan 14 Javascript
JavaScript获取键盘按键的键码(参照表)
Jan 10 Javascript
canvas实现流星雨的背景效果
Jan 13 Javascript
Vue学习笔记进阶篇之函数化组件解析
Jul 21 Javascript
vue.js移动数组位置,同时更新视图的方法
Mar 08 Javascript
代码整洁之道(重构)
Oct 25 Javascript
详解VUE Element-UI多级菜单动态渲染的组件
Apr 25 Javascript
vue中使用elementUI组件手动上传图片功能
Dec 13 Javascript
JavaScript 去重和重复次数统计
Mar 31 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
搜索和替换文件或目录的一个好类--很实用
2006/10/09 PHP
php xml-rpc远程调用
2008/12/19 PHP
PHP函数之日期时间函数date()使用详解
2013/09/09 PHP
彻底删除thinkphp3.1案例blog标签的方法
2014/12/05 PHP
Mootools 1.2教程 事件处理
2009/09/15 Javascript
jquery随意添加移除html的实现代码
2011/06/21 Javascript
jQuery插件实现控制网页元素动态居中显示
2015/03/24 Javascript
javascript实现简单的进度条
2015/07/02 Javascript
JS控制按钮10秒钟后可用的方法
2015/12/22 Javascript
Bootstrap网格系统详解
2016/04/26 Javascript
jquery自定义插件开发之window的实现过程
2016/05/06 Javascript
js中用cssText设置css样式的简单方法
2016/09/19 Javascript
touch.js 拖动、缩放、旋转 (鼠标手势)功能代码
2017/02/04 Javascript
JavaScript实现二分查找实例代码
2017/02/22 Javascript
jquery easyui dataGrid动态改变排序字段名的方法
2017/03/02 Javascript
JSON 数据格式详解
2017/09/13 Javascript
JavaScript实现多叉树的递归遍历和非递归遍历算法操作示例
2018/02/08 Javascript
微信小程序前端promise封装代码实例
2019/08/24 Javascript
在Python中使用PIL模块对图片进行高斯模糊处理的教程
2015/05/05 Python
Python处理字符串之isspace()方法的使用
2015/05/19 Python
python MysqlDb模块安装及其使用详解
2018/02/23 Python
对python 矩阵转置transpose的实例讲解
2018/04/17 Python
pyqt5 comboBox获得下标、文本和事件选中函数的方法
2019/06/14 Python
Django实现微信小程序的登录验证功能并维护登录态
2019/07/04 Python
django 使用全局搜索功能的实例详解
2019/07/18 Python
Django Rest framework解析器和渲染器详解
2019/07/25 Python
Python判断字符串是否为空和null方法实例
2020/04/26 Python
2014年信访工作总结
2014/11/17 职场文书
实习指导教师评语
2014/12/30 职场文书
中秋客户感谢信
2015/01/22 职场文书
质量承诺书格式范文
2015/04/28 职场文书
运动会通讯稿600字
2015/07/20 职场文书
用Python进行栅格数据的分区统计和批量提取
2021/05/27 Python
mysql的数据压缩性能对比详情
2021/11/07 MySQL
JS setTimeout与setInterval的区别
2022/04/20 Javascript
利用Apache Common将java对象池化的问题
2022/06/16 Servers