用原生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 相关文章推荐
一端时间轮换的广告
Jun 26 Javascript
JS setCapture 区域外事件捕捉
Mar 18 Javascript
jQuery+HTML5实现手机摇一摇换衣特效
Jun 05 Javascript
jQuery实现图片走马灯效果的原理分析
Jan 16 Javascript
JS遍历对象属性的方法示例
Jan 10 Javascript
javascript操作cookie
Jan 17 Javascript
jQuery Ajax 实现分页 kkpager插件实例代码
Aug 10 jQuery
Angular5中提取公共组件之radio list的实例代码
Jul 10 Javascript
vue权限路由实现的方法示例总结
Jul 29 Javascript
微信小程序之自定义组件的实现代码(附源码)
Aug 02 Javascript
使用bootstrap实现下拉框搜索功能的实例讲解
Aug 10 Javascript
jquery操作checkbox的常用方法总结【附测试源码下载】
Jun 10 jQuery
原生的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
多个Laravel项目如何共用migrations详解
2018/09/25 PHP
Thinkphp页面跳转设置跳转等待时间的操作
2019/10/16 PHP
Prototype源码浅析 String部分(一)之有关indexOf优化
2012/01/15 Javascript
JavaScript代码简单实现求杨辉三角给定行的最大值
2013/10/29 Javascript
jQuery 设置 CSS 属性示例介绍
2014/01/16 Javascript
JS判断变量是否为空判断是否null
2014/07/25 Javascript
js+jquery实现图片裁剪功能
2015/01/02 Javascript
JS实现可缩放、拖动、关闭和最小化的浮动窗口完整实例
2015/03/04 Javascript
微信小程序图表插件(wx-charts)实例代码
2017/01/17 Javascript
浅谈JavaScript中的apply/call/bind和this的使用
2017/02/26 Javascript
vuex2中使用mapGetters/mapActions报错的解决方法
2018/10/20 Javascript
vue实现记事本功能
2019/06/26 Javascript
使用xampp将angular项目运行在web服务器的教程
2019/09/16 Javascript
Vue实现购物车基本功能
2020/11/08 Javascript
[48:00]EG vs LGD 2018国际邀请赛淘汰赛BO3 第二场 8.26
2018/08/29 DOTA
Python只用40行代码编写的计算器实例
2017/05/10 Python
Python3 Random模块代码详解
2017/12/04 Python
Python实现发送与接收邮件的方法详解
2018/03/28 Python
python 读取txt中每行数据,并且保存到excel中的实例
2018/04/29 Python
Python地图绘制实操详解
2019/03/04 Python
python3.8 微信发送服务器监控报警消息代码实现
2019/11/05 Python
python pyqtgraph 保存图片到本地的实例
2020/03/14 Python
Python正则表达式高级使用方法汇总
2020/06/18 Python
HTML5 实现图片上传预处理功能
2020/02/06 HTML / CSS
施华洛世奇西班牙官网:SWAROVSKI西班牙
2019/06/06 全球购物
英国领先的露营和露营车品牌之一:OLPRO
2019/08/06 全球购物
Yahoo-PHP面试题4
2012/05/05 面试题
String是最基本的数据类型吗?
2013/06/13 面试题
采购部岗位职责
2013/11/24 职场文书
房屋租赁协议书范本
2014/04/10 职场文书
物业公司的岗位任命书
2014/06/06 职场文书
舞蹈教育学专业自荐信
2014/06/15 职场文书
2015年端午节国旗下演讲稿
2015/03/19 职场文书
《我的伯父鲁迅先生》教学反思
2016/02/16 职场文书
2020年元旦晚会策划书模板
2019/12/30 职场文书
HTML+css盒子模型案例(圆,半圆等)“border-radius” 简单易上手
2021/05/10 HTML / CSS