用原生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 正则替换 replace(regExp, function)用法
May 22 Javascript
js 创建快捷方式的代码(fso)
Nov 19 Javascript
js+JQuery返回顶部功能如何实现
Dec 03 Javascript
探讨javascript是不是面向对象的语言
Nov 21 Javascript
脚本合并提升javascript性能示例
Feb 24 Javascript
Jquery 分页插件之Jquery Pagination
Aug 25 Javascript
JavaScript DOM 学习总结(五)
Nov 24 Javascript
JavaScript门面模式详解
Oct 19 Javascript
js中Generator函数的深入讲解
Apr 07 Javascript
JS实现的贪吃蛇游戏案例详解
May 01 Javascript
解决ie11 SCRIPT5011:不能执行已释放Script的代码问题
May 05 Javascript
JS代码屏蔽F12,右键,粘贴,复制,剪切,选中,操作实例
Sep 17 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
PHP学习之PHP表达式
2006/10/09 PHP
PHP编码规范-php coding standard
2007/03/16 PHP
使用Smarty 获取当前日期时间和格式化日期时间的方法详解
2013/06/18 PHP
PHP抽象类基本用法示例
2018/12/28 PHP
imagettftext() 失效,不起作用
2021/03/09 PHP
jquery命令汇总,方便使用jquery的朋友
2012/06/26 Javascript
浅析Cookie中的Path与domain
2013/12/18 Javascript
javascript中的return和闭包函数浅析
2014/06/06 Javascript
关于jQuery判断元素是否存在的问题示例探讨
2014/07/21 Javascript
form表单转Json提交的方法(推荐)
2016/09/23 Javascript
微信小程序 textarea 组件详解及简单实例
2017/01/10 Javascript
BootStrap表单验证 FormValidation 调整反馈图标位置的实例代码
2017/05/17 Javascript
Bootstrap table中toolbar新增条件查询及refresh参数使用方法
2018/05/18 Javascript
js数组去重的N种方法(小结)
2018/06/07 Javascript
js实现旋转的星空效果
2019/11/01 Javascript
[38:38]完美世界DOTA2联赛PWL S3 access vs Rebirth 第二场 12.17
2020/12/18 DOTA
python调用cmd命令行制作刷博器
2014/01/13 Python
Python简单日志处理类分享
2015/02/14 Python
python使用BeautifulSoup分析网页信息的方法
2015/04/04 Python
对python的unittest架构公共参数token提取方法详解
2018/12/17 Python
Python3.5 Json与pickle实现数据序列化与反序列化操作示例
2019/04/29 Python
Python3 ID3决策树判断申请贷款是否成功的实现代码
2020/05/21 Python
新闻系毕业生推荐信
2013/11/16 职场文书
毕业生自荐书模版
2014/01/04 职场文书
如何写你的创业计划书
2014/01/07 职场文书
税务干部鉴定材料
2014/02/11 职场文书
一年级班主任感言
2014/03/08 职场文书
个人校本研修方案
2014/05/26 职场文书
志愿者活动总结报告
2014/06/27 职场文书
鼋头渚导游词
2015/02/05 职场文书
在酒桌上的敬酒词
2015/08/12 职场文书
详解nginx.conf 中 root 目录设置问题
2021/04/01 Servers
基于python的matplotlib制作双Y轴图
2021/04/20 Python
吃通javascript正则表达式
2021/04/21 Javascript
Android开发手册自定义Switch开关按钮控件
2022/06/10 Java/Android
Python TypeError: ‘float‘ object is not subscriptable错误解决
2022/12/24 Python