用原生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复选框CHECKBOX全选,取消全选
Aug 30 Javascript
IE6/7/8中Option元素未设value时Select将获取空字符串
Apr 07 Javascript
autoPlay 基于jquery的图片自动播放效果
Dec 07 Javascript
jquery弹出关闭遮罩层实例
Aug 06 Javascript
javascript特殊用法示例介绍
Nov 29 Javascript
js实现的二级横向菜单条实例
Aug 22 Javascript
网页瀑布流布局jQuery实现代码
Oct 21 Javascript
js中的面向对象入门
Mar 06 Javascript
angular6根据environments配置文件更改开发所需要的环境的方法
Mar 06 Javascript
node获取客户端ip功能简单示例
Aug 24 Javascript
浅谈vue中$event理解和框架中在包含默认值外传参
Aug 07 Javascript
javascript Number 与 Math对象的介绍
Nov 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
BBS(php &amp; mysql)完整版(六)
2006/10/09 PHP
php加密解密函数authcode的用法详细解析
2013/10/28 PHP
PHP Yii框架之表单验证规则大全
2015/11/16 PHP
PHP实现的折半查找算法示例
2017/12/19 PHP
php实现构建排除当前元素的乘积数组方法
2018/10/06 PHP
怎么让脚本或里面的函数在所有图片都载入完毕的时候执行
2006/10/17 Javascript
js 完美图片新闻轮转效果,腾讯大粤网首页图片轮转改造而来
2011/11/21 Javascript
JQuery中判断一个元素下面是否有内容或者有某个标签的判断代码
2012/02/02 Javascript
关于div自适应高度/左右高度自适应一致的js代码
2013/03/22 Javascript
jQuery :first选择器使用介绍
2013/08/09 Javascript
input链接页面、打开新网页等等的具体实现
2013/12/30 Javascript
javascript学习笔记(五)原型和原型链详解
2014/10/08 Javascript
jQuery自定义添加&quot;$&quot;与解决&quot;$&quot;冲突的方法
2015/01/19 Javascript
JavaScript制作淘宝星级评分效果的思路
2020/06/23 Javascript
jquery+json实现分页效果
2016/03/07 Javascript
JavaScript中的数组遍历forEach()与map()方法以及兼容写法介绍
2016/05/19 Javascript
基于jQuery下拉选择框插件支持单选多选功能代码
2016/06/07 Javascript
jQuery的deferred对象使用详解
2016/09/25 Javascript
vue服务端渲染的实例代码
2017/08/28 Javascript
vue源码学习之Object.defineProperty 对数组监听
2018/05/30 Javascript
Angular路由ui-router配置详解
2018/08/01 Javascript
koa2实现登录注册功能的示例代码
2018/12/03 Javascript
基于webpack4+vue-cli3项目实现换肤功能
2019/07/17 Javascript
LayUI数据接口返回实体封装的例子
2019/09/12 Javascript
JavaScript定时器常见用法实例分析
2019/11/15 Javascript
python进程类subprocess的一些操作方法例子
2014/11/22 Python
Python实现的基数排序算法原理与用法实例分析
2017/11/23 Python
利用python开发app实战的方法
2019/07/09 Python
基于python解线性矩阵方程(numpy中的matrix类)
2019/10/21 Python
IDLE下Python文件编辑和运行操作
2020/04/25 Python
python3 使用openpyxl将mysql数据写入xlsx的操作
2020/05/15 Python
浅析两列自适应布局的3种思路
2016/05/03 HTML / CSS
2013年办公室秘书的个人自我鉴定
2013/10/24 职场文书
2014镇党委班子对照检查材料思想汇报
2014/09/23 职场文书
学校财务管理制度
2015/08/04 职场文书
SpringCloud超详细讲解Feign声明式服务调用
2022/06/21 Java/Android