用原生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 学习笔记 element属性控制
Jul 23 Javascript
JavaScript中的apply和call函数详解
Jul 20 Javascript
javascript中字体浮动效果的简单实例演示
Nov 18 Javascript
基于JavaScript实现全屏透明遮罩div层锁屏效果
Jan 26 Javascript
jQuery插件EasyUI获取当前Tab中iframe窗体对象的方法
Aug 05 Javascript
Vue.js 递归组件实现树形菜单(实例分享)
Dec 21 Javascript
JavaScript实现无穷滚动加载数据
May 06 Javascript
vue利用better-scroll实现轮播图与页面滚动详解
Oct 20 Javascript
vue小白入门教程
Apr 02 Javascript
Js中将Long转换成日期格式的实现方法
Jun 05 Javascript
使用iView Upload 组件实现手动上传图片的示例代码
Oct 01 Javascript
vue调试工具vue-devtools安装及使用方法
Nov 07 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+ajax实时输入自动搜索匹配的方法
2014/12/26 PHP
?牟┛途W扣了一??效果出?? target=
2007/05/27 Javascript
深入理解javaScript中的事件驱动
2013/05/21 Javascript
JQuery日历插件My97DatePicker日期范围限制
2016/01/20 Javascript
JS组件Bootstrap Select2使用方法解析
2016/05/30 Javascript
浅谈javascript alert和confirm的美化
2016/12/15 Javascript
快速掌握jQuery插件开发
2017/01/19 Javascript
Vue + Webpack + Vue-loader学习教程之相关配置篇
2017/03/14 Javascript
Require.js的基本用法详解
2017/07/03 Javascript
vue 运用mock数据的示例代码
2017/11/07 Javascript
jQuery实现滚动到底部时自动加载更多的方法示例
2018/02/18 jQuery
使用Angular CLI从蓝本生成代码详解
2018/03/24 Javascript
layer弹出层全屏及关闭方法
2018/08/17 Javascript
什么时候不能在 Node.js 中使用 Lock Files
2019/06/24 Javascript
vue响应式更新机制及不使用框架实现简单的数据双向绑定问题
2019/06/27 Javascript
微信小程序页面渲染实现方法
2019/11/06 Javascript
JS实现简单日历特效
2020/01/03 Javascript
javascript实现前端分页效果
2020/06/24 Javascript
vue结合el-upload实现腾讯云视频上传功能
2020/07/01 Javascript
vue 解决setTimeOut和setInterval函数无效报错的问题
2020/07/30 Javascript
vue实现div可拖动位置也可改变盒子大小的原理
2020/09/16 Javascript
[56:12]LGD vs Optic Supermajor小组赛D组胜者组决赛 BO3 第一场 6.3
2018/06/04 DOTA
介绍Python中内置的itertools模块
2015/04/29 Python
基于Django的python验证码(实例讲解)
2017/10/23 Python
详解Django中间件执行顺序
2018/07/16 Python
python+Splinter实现12306抢票功能
2018/09/25 Python
对python中字典keys,values,items的使用详解
2019/02/03 Python
python 将有序数组转换为二叉树的方法
2019/03/26 Python
如何在python中执行另一个py文件
2020/04/30 Python
教师爱岗敬业演讲稿
2014/05/05 职场文书
高中校园广播稿
2014/10/21 职场文书
2015年发展党员工作总结报告
2015/03/31 职场文书
团队执行力培训心得体会
2015/08/15 职场文书
2016会计专业自荐信范文
2016/01/28 职场文书
gateway与spring-boot-starter-web冲突问题的解决
2021/07/16 Java/Android
OpenCV图像变换之傅里叶变换的一些应用
2021/07/26 Python