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 LigerUI 使用教程表格篇(1)
Jan 18 Javascript
JavaScript 处理Iframe自适应高度(同或不同域名下)
Mar 29 Javascript
JS实现时间格式化的方式汇总
Oct 16 Javascript
利用jQuery实现可以编辑的表格
May 26 Javascript
JQuery的Ajax中Post方法传递中文出现乱码的解决方法
Oct 21 Javascript
深入浅析react native es6语法
Dec 09 Javascript
JavaScript自定义文本框光标
Mar 05 Javascript
vue添加class样式实例讲解
Feb 12 Javascript
vue2.0 实现富文本编辑器功能
May 26 Javascript
Node.js从字符串生成文件流的实现方法
Aug 18 Javascript
详谈vue中router-link和传统a链接的区别
Jul 22 Javascript
如何在面试中手写出javascript节流和防抖函数
Oct 22 Javascript
让你的博客飘雪花超出屏幕依然看得见
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
一个很方便的 XML 类!!原创的噢
2006/10/09 PHP
MYSQL环境变量设置方法
2007/01/15 PHP
php中sprintf与printf函数用法区别解析
2014/02/17 PHP
Laravel框架中扩展函数、扩展自定义类的方法
2014/09/04 PHP
WordPress中用于获取搜索表单的PHP函数使用解析
2016/01/05 PHP
PHP之十六个魔术方法详细介绍
2016/11/01 PHP
php中请求url的五种方法总结
2017/07/13 PHP
9个JavaScript评级/投票插件
2010/01/18 Javascript
为JavaScript添加重载函数的辅助方法
2010/07/04 Javascript
jquery获取div宽度的实现思路与代码
2013/01/13 Javascript
举例讲解jQuery中可见性过滤选择器的使用
2016/04/18 Javascript
JS全局变量和局部变量最新解析
2016/06/24 Javascript
Node.js Streams文件读写操作详解
2016/07/04 Javascript
jquery 点击元素后,滚动条滚动至该元素位置的方法
2016/08/05 Javascript
jQuery实现可拖拽的许愿墙效果【附demo源码下载】
2016/09/14 Javascript
微信小程序 高德地图SDK详解及简单实例(源码下载)
2017/01/11 Javascript
angular+ionic返回上一页并刷新页面
2017/08/08 Javascript
bootstrap+jquery项目引入文件报错的解决方法
2018/01/22 jQuery
详解webpack4.x之搭建前端开发环境
2019/03/28 Javascript
原生微信小程序开发中 redux 的使用详解
2021/02/18 Javascript
[01:02:03]2014 DOTA2华西杯精英邀请赛 5 24 NewBee VS VG
2014/05/26 DOTA
Python ORM框架SQLAlchemy学习笔记之安装和简单查询实例
2014/06/10 Python
Python遍历文件夹和读写文件的实现方法
2017/05/10 Python
django DRF图片路径问题的解决方法
2018/09/10 Python
python实现任意位置文件分割的实例
2018/12/14 Python
Scrapy-Redis结合POST请求获取数据的方法示例
2019/05/07 Python
Java文件与类动手动脑实例详解
2019/11/10 Python
利用python画出AUC曲线的实例
2020/02/28 Python
Django Session和Cookie分别实现记住用户登录状态操作
2020/07/02 Python
django 模型字段设置默认值代码
2020/07/15 Python
Python函数调用追踪实现代码
2020/11/27 Python
瑞士男士时尚网上商店:Babista
2020/05/14 全球购物
满月酒主持词
2014/03/27 职场文书
青安岗事迹材料
2014/05/14 职场文书
洗手间标语
2014/06/23 职场文书
深入解读Java三大集合之map list set的用法
2021/11/11 Java/Android