用原生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游戏开发之《三国志曹操传》零部件开发(三)情景对话中仿打字机输出文字
Jan 23 Javascript
js对象转json数组的简单实现案例
Feb 28 Javascript
用jquery快速解决IE输入框不能输入的问题
Oct 04 Javascript
使用 jQuery.ajax 上传带文件的表单遇到的问题
Oct 31 Javascript
微信小程序中input标签详解及简单实例
May 18 Javascript
vue深入解析之render function code详解
Jul 18 Javascript
浅谈angular4生命周期钩子
Sep 05 Javascript
使用js获取伪元素的content实例
Oct 24 Javascript
js canvas实现二维码和图片合成的海报
Nov 19 Javascript
Vue框架下引入ActiveX控件的问题解决
Mar 25 Javascript
React+Redux实现简单的待办事项列表ToDoList
Sep 29 Javascript
vue 根据选择的月份动态展示日期对应的星期几
Feb 06 Vue.js
原生的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
解析dedecms空间迁移步骤详解
2013/05/15 PHP
PHP防止注入攻击实例分析
2014/11/03 PHP
一个无限级XML绑定跨框架菜单(For IE)
2007/01/27 Javascript
php显示当前文件所在的文件以及文件夹所有文件以树形展开
2013/12/13 Javascript
用js设置下拉框为只读的小技巧
2014/04/10 Javascript
JS 在指定数组中随机取出N个不重复的数据
2014/06/10 Javascript
JavaScript如何调试有哪些建议和技巧附五款有用的调试工具
2015/10/28 Javascript
JavaScript中使用sencha gridpanel 编辑单元格、改变单元格颜色
2015/11/26 Javascript
自动完成的搜索框javascript实现
2016/02/26 Javascript
Jquery实现$.fn.extend和$.extend函数
2016/04/14 Javascript
angularJS模态框$modal实例代码
2017/05/27 Javascript
利用纯js + transition动画实现移动端web轮播图详解
2017/09/10 Javascript
原生JS实现图片无缝滚动方法(附带封装的运动框架)
2017/10/01 Javascript
ReactNative中使用Redux架构总结
2017/12/15 Javascript
vue cli 全面解析
2018/02/28 Javascript
vuejs 切换导航条高亮(路由菜单高亮)的方法示例
2018/05/29 Javascript
详解react阻止无效重渲染的多种方式
2018/12/11 Javascript
浅谈Webpack多页应用HMR卡住问题
2019/04/24 Javascript
深入剖析JavaScript instanceof 运算符
2019/06/14 Javascript
JS Html转义和反转义(html编码和解码)的实现与使用方法总结
2020/03/10 Javascript
Vue 中如何将函数作为 props 传递给组件的实现代码
2020/05/12 Javascript
基于Electron实现桌面应用开发代码实例
2020/07/07 Javascript
[01:02:38]DOTA2-DPC中国联赛定级赛 LBZS vs Phoenix BO3第二场 1月10日
2021/03/11 DOTA
Django 前后台的数据传递的方法
2017/08/08 Python
python得到一个excel的全部sheet标签值方法
2018/12/10 Python
Django 实现admin后台显示图片缩略图的例子
2019/07/28 Python
Python中 Global和Nonlocal的用法详解
2020/01/20 Python
CSS3实现文字波浪线效果示例代码
2016/11/20 HTML / CSS
玖熙女鞋美国官网:Nine West
2016/10/06 全球购物
求职简历中个人的自我评价
2013/12/01 职场文书
成功的餐厅经营创业计划书
2014/01/15 职场文书
大学军训感言1000字
2014/02/25 职场文书
网站推广策划方案
2014/06/04 职场文书
珠宝的促销活动方案
2014/08/31 职场文书
新年晚会主持词开场白
2015/05/28 职场文书
go语言中http超时引发的事故解决
2021/06/02 Golang