用原生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 继承机制实例
Aug 12 Javascript
一些javascript一些题目的解析
Dec 25 Javascript
JQuery中form验证出错信息的查看方法
Oct 08 Javascript
JavaScript中判断整字类型最简洁的实现方法
Nov 08 Javascript
javascript 中的try catch应用总结
Apr 01 Javascript
详解webpack介绍&amp;安装&amp;常用命令
Jun 29 Javascript
node.js 发布订阅模式的实例
Sep 10 Javascript
Mac下安装vue
Apr 11 Javascript
关于js的三种使用方式(行内js、内部js、外部js)的程序代码
May 05 Javascript
修改npm全局安装模式的路径方法
May 15 Javascript
validform表单验证的实现方法
Mar 08 Javascript
JavaScript 作用域scope简单汇总
Oct 23 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
phpmyadmin3 安装配置图解教程
2012/03/29 PHP
php中使用exec,system等函数调用系统命令的方法(不建议使用,可导致安全问题)
2012/09/07 PHP
PHP加密解密字符串汇总
2015/04/26 PHP
PHP截取IE浏览器并缩小原图的方法
2016/03/04 PHP
php判断手机浏览还是web浏览,并执行相应的动作简单实例
2016/07/28 PHP
在js中单选框和复选框获取值的方式
2009/11/06 Javascript
JavaScript中yield实用简洁实现方式
2010/06/12 Javascript
分别用marquee和div+js实现首尾相连循环滚动效果,仅3行代码
2011/09/21 Javascript
浅析webapp框架AngularUI的demo
2014/12/21 Javascript
Javascript中arguments用法实例分析
2015/06/13 Javascript
详解Node.js 命令行程序开发教程
2017/06/07 Javascript
jQuery简介_动力节点Java学院整理
2017/07/04 jQuery
js学习总结之DOM2兼容处理顺序问题的解决方法
2017/07/27 Javascript
jQuery实现菜单栏导航效果
2017/08/15 jQuery
shiro授权的实现原理
2017/09/21 Javascript
详解vue项目中调用百度地图API使用方法
2019/04/25 Javascript
vue项目初始化到登录login页面的示例
2019/10/31 Javascript
vue 解决setTimeOut和setInterval函数无效报错的问题
2020/07/30 Javascript
Python中还原JavaScript的escape函数编码后字符串的方法
2014/08/22 Python
Python处理PDF及生成多层PDF实例代码
2017/04/24 Python
Python实现将一个正整数分解质因数的方法分析
2017/12/14 Python
Python多线程编程之多线程加锁操作示例
2018/09/06 Python
Django之腾讯云短信的实现
2020/06/12 Python
浅析Python 抽象工厂模式的优缺点
2020/07/13 Python
全球虚拟主机商:HostGator
2017/02/06 全球购物
联想香港官方网站及网店:Lenovo香港
2018/04/13 全球购物
双立人加拿大官网:Zwilling加拿大
2020/08/10 全球购物
法国亚马逊官方网站:Amazon.fr
2020/12/19 全球购物
大学生四年生活自我鉴定
2013/11/21 职场文书
八一建军节部队活动方案
2014/02/04 职场文书
学生周末回家住宿长期请假条
2014/02/15 职场文书
主管竞聘书范文
2014/03/31 职场文书
工会趣味活动方案
2014/08/18 职场文书
2015年七一建党节慰问信
2015/03/23 职场文书
详解MySql中InnoDB存储引擎中的各种锁
2022/02/12 MySQL
Python利用capstone实现反汇编
2022/04/06 Python