javascript返回顶部效果(自写代码)


Posted in Javascript onJanuary 06, 2013

现在很多网站都用到了返回顶部的效果,当然懒的话也可以直接 a 链接链到 #,这样也可以达到效果。今天抽空用原生 javascript 写了个,由于本人水平有限,如有问题请指出。
html 代码

<!DOCTYPE HTML> 
<html lang="en-US"> 
<head> 
<meta charset="UTF-8"> 
<title>js-回到顶部</title> 
<style type="text/css"> 
*{margin:0;padding:0;} 
.wrapper{width:960px;margin-left:auto;margin-right:auto;} 
p{margin:10px;line-height:30px;} 
#top{position:fixed;right:130px;bottom:50px;background:gray;padding:5px;display:block;} 
</style> 
</head> 
<body> 
<p>“记事本”是一个用来创建简单的文档的基本的文本编辑器。“记事本”最常用来查看或编辑文本 (.txt) 文件,但是许多用户发现“记事本”是创建网页的简单工具。</p> 
<p>因为“记事本”仅支持很基本的格式,所以您不能在需要保持纯文本的文档中偶尔保存特殊格式。因为特殊字符或其他格式不能在所发布的网页上显示,否则可能导致错误,所以,在为网页创建 HTML 文档时它特别有用。</p> 
<p>可以将记事本文件保存为 Unicode、ANSI、UTF-8 或高位在前的 Unicode 格式。当使用不同字符集的文档时,这些格式可以向您提供更大的灵活性。</p> 
<p>“记事本”是一个用来创建简单的文档的基本的文本编辑器。“记事本”最常用来查看或编辑文本 (.txt) 文件,但是许多用户发现“记事本”是创建网页的简单工具。</p> 
<p>因为“记事本”仅支持很基本的格式,所以您不能在需要保持纯文本的文档中偶尔保存特殊格式。因为特殊字符或其他格式不能在所发布的网页上显示,否则可能导致错误,所以,在为网页创建 HTML 文档时它特别有用。</p> 
<p>可以将记事本文件保存为 Unicode、ANSI、UTF-8 或高位在前的 Unicode 格式。当使用不同字符集的文档时,这些格式可以向您提供更大的灵活性。</p> 
<p>“记事本”是一个用来创建简单的文档的基本的文本编辑器。“记事本”最常用来查看或编辑文本 (.txt) 文件,但是许多用户发现“记事本”是创建网页的简单工具。</p> 
<p>因为“记事本”仅支持很基本的格式,所以您不能在需要保持纯文本的文档中偶尔保存特殊格式。因为特殊字符或其他格式不能在所发布的网页上显示,否则可能导致错误,所以,在为网页创建 HTML 文档时它特别有用。</p> 
<p>可以将记事本文件保存为 Unicode、ANSI、UTF-8 或高位在前的 Unicode 格式。当使用不同字符集的文档时,这些格式可以向您提供更大的灵活性。</p> 
<p>“记事本”是一个用来创建简单的文档的基本的文本编辑器。“记事本”最常用来查看或编辑文本 (.txt) 文件,但是许多用户发现“记事本”是创建网页的简单工具。</p> 
<p>因为“记事本”仅支持很基本的格式,所以您不能在需要保持纯文本的文档中偶尔保存特殊格式。因为特殊字符或其他格式不能在所发布的网页上显示,否则可能导致错误,所以,在为网页创建 HTML 文档时它特别有用。</p> 
<p>可以将记事本文件保存为 Unicode、ANSI、UTF-8 或高位在前的 Unicode 格式。当使用不同字符集的文档时,这些格式可以向您提供更大的灵活性。</p> 
<p>“记事本”是一个用来创建简单的文档的基本的文本编辑器。“记事本”最常用来查看或编辑文本 (.txt) 文件,但是许多用户发现“记事本”是创建网页的简单工具。</p> 
<p>因为“记事本”仅支持很基本的格式,所以您不能在需要保持纯文本的文档中偶尔保存特殊格式。因为特殊字符或其他格式不能在所发布的网页上显示,否则可能导致错误,所以,在为网页创建 HTML 文档时它特别有用。</p> 
<p>可以将记事本文件保存为 Unicode、ANSI、UTF-8 或高位在前的 Unicode 格式。当使用不同字符集的文档时,这些格式可以向您提供更大的灵活性。</p> 
<p>“记事本”是一个用来创建简单的文档的基本的文本编辑器。“记事本”最常用来查看或编辑文本 (.txt) 文件,但是许多用户发现“记事本”是创建网页的简单工具。</p> 
<p>因为“记事本”仅支持很基本的格式,所以您不能在需要保持纯文本的文档中偶尔保存特殊格式。因为特殊字符或其他格式不能在所发布的网页上显示,否则可能导致错误,所以,在为网页创建 HTML 文档时它特别有用。</p> 
<p>可以将记事本文件保存为 Unicode、ANSI、UTF-8 或高位在前的 Unicode 格式。当使用不同字符集的文档时,这些格式可以向您提供更大的灵活性。</p> 
<p>“记事本”是一个用来创建简单的文档的基本的文本编辑器。“记事本”最常用来查看或编辑文本 (.txt) 文件,但是许多用户发现“记事本”是创建网页的简单工具。</p> 
<p>因为“记事本”仅支持很基本的格式,所以您不能在需要保持纯文本的文档中偶尔保存特殊格式。因为特殊字符或其他格式不能在所发布的网页上显示,否则可能导致错误,所以,在为网页创建 HTML 文档时它特别有用。</p> 
<p>可以将记事本文件保存为 Unicode、ANSI、UTF-8 或高位在前的 Unicode 格式。当使用不同字符集的文档时,这些格式可以向您提供更大的灵活性。</p> 
<p>“记事本”是一个用来创建简单的文档的基本的文本编辑器。“记事本”最常用来查看或编辑文本 (.txt) 文件,但是许多用户发现“记事本”是创建网页的简单工具。</p> 
<p>因为“记事本”仅支持很基本的格式,所以您不能在需要保持纯文本的文档中偶尔保存特殊格式。因为特殊字符或其他格式不能在所发布的网页上显示,否则可能导致错误,所以,在为网页创建 HTML 文档时它特别有用。</p> 
<p>可以将记事本文件保存为 Unicode、ANSI、UTF-8 或高位在前的 Unicode 格式。当使用不同字符集的文档时,这些格式可以向您提供更大的灵活性。</p> 
<p>“记事本”是一个用来创建简单的文档的基本的文本编辑器。“记事本”最常用来查看或编辑文本 (.txt) 文件,但是许多用户发现“记事本”是创建网页的简单工具。</p> 
<p>因为“记事本”仅支持很基本的格式,所以您不能在需要保持纯文本的文档中偶尔保存特殊格式。因为特殊字符或其他格式不能在所发布的网页上显示,否则可能导致错误,所以,在为网页创建 HTML 文档时它特别有用。</p> 
<p>可以将记事本文件保存为 Unicode、ANSI、UTF-8 或高位在前的 Unicode 格式。当使用不同字符集的文档时,这些格式可以向您提供更大的灵活性。</p> 
<p>“记事本”是一个用来创建简单的文档的基本的文本编辑器。“记事本”最常用来查看或编辑文本 (.txt) 文件,但是许多用户发现“记事本”是创建网页的简单工具。</p> 
<p>因为“记事本”仅支持很基本的格式,所以您不能在需要保持纯文本的文档中偶尔保存特殊格式。因为特殊字符或其他格式不能在所发布的网页上显示,否则可能导致错误,所以,在为网页创建 HTML 文档时它特别有用。</p> 
<p>可以将记事本文件保存为 Unicode、ANSI、UTF-8 或高位在前的 Unicode 格式。当使用不同字符集的文档时,这些格式可以向您提供更大的灵活性。</p> 
<p>“记事本”是一个用来创建简单的文档的基本的文本编辑器。“记事本”最常用来查看或编辑文本 (.txt) 文件,但是许多用户发现“记事本”是创建网页的简单工具。</p> 
<p>因为“记事本”仅支持很基本的格式,所以您不能在需要保持纯文本的文档中偶尔保存特殊格式。因为特殊字符或其他格式不能在所发布的网页上显示,否则可能导致错误,所以,在为网页创建 HTML 文档时它特别有用。</p> 
<p>可以将记事本文件保存为 Unicode、ANSI、UTF-8 或高位在前的 Unicode 格式。当使用不同字符集的文档时,这些格式可以向您提供更大的灵活性。</p> 
<p>“记事本”是一个用来创建简单的文档的基本的文本编辑器。“记事本”最常用来查看或编辑文本 (.txt) 文件,但是许多用户发现“记事本”是创建网页的简单工具。</p> 
<p>因为“记事本”仅支持很基本的格式,所以您不能在需要保持纯文本的文档中偶尔保存特殊格式。因为特殊字符或其他格式不能在所发布的网页上显示,否则可能导致错误,所以,在为网页创建 HTML 文档时它特别有用。</p> 
<p>可以将记事本文件保存为 Unicode、ANSI、UTF-8 或高位在前的 Unicode 格式。当使用不同字符集的文档时,这些格式可以向您提供更大的灵活性。</p> 
<a href="javascript:;" id="top">回到顶部</a> 
</body> 
</html> 
<script type="text/javascript" src="js/toTop.js"></script> 
<script type="text/javascript"> 
window.onload = function(){ 
toTop('top',false); 
} 
</script>

toTop.js 代码
//第一个参数是按钮id;第二个参数是一个布尔值,true是一直显示按钮,false是当滚动距离不为0时,显示按钮 
function toTop(id,show){ 
var oTop = document.getElementById(id); 
var bShow = show; 
if(!bShow){ 
oTop.style.display = 'none'; 
setTimeout(btnShow,50); 
} 
oTop.onclick = scrollToTop; 
function scrollToTop(){ 
var scrollTop = document.documentElement.scrollTop || document.body.scrollTop; 
var iSpeed = Math.floor(-scrollTop/2); 
if(scrollTop <= 0){ 
if(!bShow){ 
oTop.style.display = 'none'; 
} 
return; 
} 
document.documentElement.scrollTop = document.body.scrollTop = scrollTop + iSpeed; 
setTimeout(arguments.callee,50); 
} 
function btnShow(){ 
var scrollTop = document.documentElement.scrollTop || document.body.scrollTop; 
if(scrollTop <= 0 ){ 
oTop.style.display = 'none'; 
}else{ 
oTop.style.display = 'block'; 
} 
setTimeout(arguments.callee,50); 
} 
}

注意
ie6 下 position:fixed 无效,具体兼容请点击浏览器的各种bug。另外以前写过一篇css解决ie6下position:fixed失效,并不支持该效果。
PS:这是本人闲着无聊,通过自己所学的 javascript 知识,随意写的一些效果。

第二种方法
很多网页在下方都会放置一个“返回顶部”按钮,尤其是页面底部没有导航的网页,这样可以帮助访客重新找到导航或者重温一遍广告(想得真美)。随着近几年来 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中删除元素的实现代码
Dec 29 Javascript
JavaScript打开word文档的实现代码(c#)
Apr 16 Javascript
JavaScript截断字符串的方法
Jul 15 Javascript
JavaScript实现的背景自动变色代码
Oct 17 Javascript
Angularjs结合Bootstrap制作的一个TODO List
Aug 18 Javascript
纯js仿淘宝京东商品放大镜功能
Mar 02 Javascript
angular2中router路由跳转navigate的使用与刷新页面问题详解
May 07 Javascript
JS获取浏览器地址栏的多个参数值的任意值实例代码
Jul 24 Javascript
vue+vue-router转场动画的实例代码
Sep 01 Javascript
vue3.0中的双向数据绑定方法及优缺点
Aug 01 Javascript
layui 选择列表,打勾,点击确定返回数据的例子
Sep 02 Javascript
js、jquery实现列表模糊搜索功能过程解析
Mar 27 jQuery
让你的博客飘雪花超出屏幕依然看得见
Jan 04 #Javascript
修改js Calendar日历控件 兼容IE9/谷歌/火狐
Jan 04 #Javascript
jquery入门—选择器实现隔行变色实例代码
Jan 04 #Javascript
jquery formValidator插件ajax验证 内容不做任何修改再离开提示错误的bug解决方法
Jan 04 #Javascript
formvalidator验证插件中有关ajax验证问题
Jan 04 #Javascript
使用jquery mobile做幻灯播放效果实现步骤
Jan 04 #Javascript
jquery 插件开发 extjs中的extend用法小结
Jan 04 #Javascript
You might like
php读取javascript设置的cookies的代码
2010/04/12 PHP
PHP的魔术常量__METHOD__简介
2014/07/08 PHP
php微信开发之关注事件
2018/06/14 PHP
javascript实现的像java、c#之类的sleep暂停的函数代码
2010/03/04 Javascript
理解Javascript_14_函数形式参数与arguments
2010/10/20 Javascript
新鲜出炉的js tips提示效果
2011/04/03 Javascript
仅IE9/10同时支持script元素的onload和onreadystatechange事件分析
2011/04/27 Javascript
jQuery.extend 函数详解
2012/02/03 Javascript
ajax不执行success回调而是执行了error回调
2012/12/10 Javascript
浅谈Javascript中匀速运动的停止条件
2014/12/19 Javascript
JavaScript中Function()函数的使用教程
2015/06/04 Javascript
jQuery原型属性和原型方法详解
2015/07/07 Javascript
jquery ajax双击div可直接修改div中的内容
2016/03/04 Javascript
bootstrap fileinput 上传插件的基础使用
2017/02/17 Javascript
JavaScript闭包_动力节点Java学院整理
2017/06/27 Javascript
element-ui 中的table的列隐藏问题解决
2018/08/24 Javascript
Webstorm2016使用技巧(SVN插件使用)
2018/10/29 Javascript
Vue递归实现树形菜单方法实例
2018/11/06 Javascript
JavaScript设计模式之责任链模式实例分析
2019/01/16 Javascript
Electron vue的使用教程图文详解
2019/07/05 Javascript
vue中根据时间戳判断对应的时间(今天 昨天 前天)
2019/12/20 Javascript
详解Python函数作用域的LEGB顺序
2016/05/14 Python
Python常见加密模块用法分析【MD5,sha,crypt模块】
2017/05/24 Python
Tensorflow使用支持向量机拟合线性回归
2018/09/07 Python
解决Python3.8运行tornado项目报NotImplementedError错误
2020/09/02 Python
五分钟学会怎么用python做一个简单的贪吃蛇
2021/01/12 Python
HTML5 语义化结构化规范化
2008/10/17 HTML / CSS
雷蛇美国官网:Razer
2020/04/03 全球购物
优纳科技软件测试面试题
2012/05/15 面试题
幼儿园美术教学反思
2014/01/31 职场文书
思想品德课教学反思
2014/02/10 职场文书
机关门卫的岗位职责
2014/04/29 职场文书
医院领导班子查摆问题对照检查材料思想汇报
2014/10/08 职场文书
赢在中国观后感
2015/06/02 职场文书
微信小程序和php的登录实现
2021/04/01 PHP
springboot 全局异常处理和统一响应对象的处理方式
2022/06/28 Java/Android