兼容IE,chrome 等所有浏览器 回到顶部代码
今天在博客园看到一片帖子回到顶部代码,索性就看了下,但是发现在非IE浏览器下可以运行,在IE浏览器下却运行不了。
故将其代码搬弄过来做了些许修改后,完美支持了IE下的运行。

主要实现功能代码文件:
<html>
<head>
<title>兼容IE,chrome 等所有浏览器 回到顶部代码</title>
<style type="text/css">
.fixed {
position: fixed; /*对于火狐等其他浏览器需要设置的*/
bottom: 30px;
right: 30px;
width: 40px;
height: 40px;
cursor: pointer;
display: none;
background: url(images/top_bg.png) no-repeat left top;
}
.ie {
_position: absolute;
_clear: both;
_top: expression(eval(document.compatMode && document.compatMode=='CSS1Compat') ? documentElement.scrollTop +(documentElement.clientHeight-this.clientHeight) - 30 : document.body.scrollTop +(document.body.clientHeight-this.clientHeight) - 30);
} #btn:hover {
background: url(images/top_bg.png) no-repeat left -40px;
}
</style>
<script type="text/javascript" src="js/Event.js"></script>
</head>
<body>
<a href="javascript:void(0);" id="btn" class="fixed ie"></a>
<script type="text/javascript">
var isTop = true;
var clientHeight = document.documentElement.clientHeight || document.body.clientHeight; var btnBack = document.getElementById('btn');
//添加点击事件
addEvent(btnBack, 'click', function () {
var timer = setInterval(function () {
//获取滚动条到顶部的距离
//我们需要兼容一些浏览器的写法 所以需要使用||兼容chrome
var osTop = document.documentElement.scrollTop || document.body.scrollTop; //返回一个整数
var speed = Math.floor(-osTop / 5);
//滚动事件
isTop = true;
//设置滚动条到顶部的距离
//我们需要兼容一些浏览器的写法 所以需要使用||兼容chrome
document.documentElement.scrollTop = document.body.scrollTop = osTop + speed;
//这里必须设置为真 如果为假 在触发滚动事件的时候 就会关闭定时器
if (osTop <= 0) {
clearInterval(timer);
}
}, 50);
}); //滚动时发生的事件
window.onscroll = document.onscroll = function () {
//获取滚动条到顶部的距离
//我们需要兼容一些浏览器的写法 所以需要使用||兼容chrome
var osTop = document.documentElement.scrollTop || document.body.scrollTop;
//滚动到第二屏的时候 会出现回到顶部的按钮
if (osTop > clientHeight) {
btnBack.style.display = "block";
}
else {
btnBack.style.display = "none";
} if (!isTop) {
clearInterval();
}
isTop = false;
}
</script>
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
</body>
</html>
注:Event.js 主要是实现对所有浏览器添加事件以及移除事件。
代码如下:
/*
* 添加事件处理程序
* @param object object 要添加事件处理程序的元素
* @param string type 事件名称,如click
* @param function handler 事件处理程序,可以直接以匿名函数的形式给定,或者给一个已经定义的函数名。匿名函数方式给定的事件处理程序在IE6 IE7 IE8中可以移除,在标准浏览器中无法移除。
* @param boolean remove 是否是移除的事件,本参数是为简化下面的removeEvent函数而写的,对添加事件处理程序不起任何作用
* 描述:一个函数完全代替attachEvent/detachEvent,并且支持所有主流浏览器、解决IE6 IE7 IE8事件绑定导致的先绑定后执行问题。
* 下面是完美兼容addEventListener/removeEventListener和attachEvent/detachEvent的函数,支持Google Chrome/Firefox/Safari/Opera/IE 6 7 8 9 10 11等所有主流浏览器,
* 能够完美解决IE6 IE7 IE8 this指向错误,能够纠正IE6 IE7 IE8中事件先绑定后执行的错误。
*/
function addEvent(object, type, handler, remove) {
if (typeof object != 'object' || typeof handler != 'function') return;
try {
object[remove ? 'removeEventListener' : 'addEventListener'](type, handler, false);
} catch (e) {
var xc = '_' + type;
object[xc] = object[xc] || [];
if (remove) {
var l = object[xc].length;
for (var i = 0; i < l; i++) {
if (object[xc][i].toString() === handler.toString()) object[xc].splice(i, 1);
}
} else {
var l = object[xc].length;
var exists = false;
for (var i = 0; i < l; i++) {
if (object[xc][i].toString() === handler.toString()) exists = true;
}
if (!exists) object[xc].push(handler);
}
object['on' + type] = function () {
var l = object[xc].length;
for (var i = 0; i < l; i++) {
object[xc][i].apply(object, arguments);
}
}
}
}
/* 移除事件处理程序 */
function removeEvent(object, type, handler) {
addEvent(object, type, handler, true);
}
有什么地方有不妥之处,还望大神们指正,小弟不胜感激。
源码下载地址:https://pan.baidu.com/s/1eR5xD2i
兼容IE,chrome 等所有浏览器 回到顶部代码的更多相关文章
- Jquery判断离开页面时,通过Ajax更新数据(兼容IE,Chrome,FF浏览器)
现在很多项目都有客户离开网页时,处理一些业务的需求.所以焦点就聚集在了如何获取页面离开事件. 以下是本人在一个项目中需要记录页面浏览时长的处理办法,测试兼容IE,Chrome,FF浏览器 代码如下: ...
- listView从底部回到顶部代码实现
可用如下方法: 1.平滑的回到顶部,但是会划过中间的每一页 mListView.getRefreshableView().smoothScrollToPosition(0); 2.直接跳到顶部 if ...
- JS复制内容到剪贴板(兼容FF/Chrome/Safari所有浏览器)
现在浏览器种类也越来越多,诸如 IE.Firefox.Chrome.Safari等等,因此现在要实现一个js复制内容到剪贴板的小功能就不是一件那么容易的事了. 在FLASH 9 时代,有一个通杀所有浏 ...
- JS实现复制到剪贴板(兼容FF/Chrome/Safari所有浏览器)
现在浏览器种类也越来越多,诸如 IE.Firefox.Chrome.Safari等等,因此现在要实现一个js复制内容到剪贴板的小功能就不是一件那么容易的事了. 在FLASH 9 时代,有一个通杀所有浏 ...
- JS回到顶部代码小记
HTML: <div id="goTop"> <a href="#top"><img src="~/Content/th ...
- jquery方法回到顶部代码
<style> /*默认样式,主要是position:fixed实现屏幕绝对定位*/ #gotoTop{display:none;position:fixed;top:75%;left:5 ...
- JS--回到顶部代码
原文地址:http://www.cnblogs.com/liguiqiang1986/articles/3132023.html JS--回到顶部代码 <!DOCTYPE html PUBLIC ...
- dom 回到顶部(兼容IE FF Chrome)
<!doctype html> <html> <head> <meta charset="utf-8"> <title> ...
- IE内嵌google chrome frame解决浏览器兼容问题
IE内嵌google chrome frame解决浏览器兼容问题 http://www.cnblogs.com/xwdreamer/archive/2013/12/17/3477776.html 参 ...
随机推荐
- .NET程序性能的基本要领
前几天在老赵的博客上看到,Bill Chiles (Roslyn 编译器的Program Manager)写了一篇文章叫做<Essential Performance Facts and .NE ...
- MeetMe
- 微信公共服务平台开发(.Net 的实现)13-------网页授权(下 :C#代码的实现 )
接着上次的理论,我们这次来研究用代码实现“网页授权获取用户基本信息”,首先我们需要一个链接指向微信的授权页面,在微信开发平台中已经说了,这个链接必须在微信客户端中打开,那么我们就干脆使用文本消息来完成 ...
- Swift2.0 中的String(二):基本操作
Swift中的字符串,第二篇,基本操作.其他的几篇传送门(GitHub打不开链接的同学请自行把地址github改成gitcafe,或者直接去归档里找:-P): Swift2.0 中的String(一) ...
- JRebel_修改class后无法正确调试问题解决【2014-03-12】
原文地址:http://www.cnblogs.com/hbbbs/p/3596179.html 现象 修改了class,编译后,JRebel自动装载到Web容器中.但此时调试这个类会发现无法正常调试 ...
- 不相交集(The Disjoint Set ADT)
0)引论 不相交集是解决等价问题的一种有效的数据结构,之所以称之为有效是因为,这个数据结构简单(几行代码,一个简单数组就可以搞定),快速(每个操作基本上可以在常数平均时间内搞定). 首先我们要明白什么 ...
- Q_INVOKABLE与invokeMethod用法全解
在Qt/Qt Quick宏浅议一文中,我们将介绍Qt中经常使用的几个宏: Q_OBJECT, SIGNAL与SLOT, Q_SIGNALS 与 Q_SLOTS, Q_EMIT ,Q_INVOKABLE ...
- socketpair理解
转载:http://liulixiaoyao.blog.51cto.com/1361095/533469/ 今天跟人谈到socketpair的问题,晚上回来写了个程序验证下自己的猜测! 先说说我的理解 ...
- 使用Thread类可以创建和控制线程
1.创建线程 static void Main(string[] args) { /* Thread类 * 创建控制线程 * 其构造函数接受ThreadStart和ParameterizedThrea ...
- Html方式导出word 页头和页脚设置
<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:o ...