今天在博客园看到一片帖子回到顶部代码,索性就看了下,但是发现在非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 等所有浏览器 回到顶部代码的更多相关文章

  1. Jquery判断离开页面时,通过Ajax更新数据(兼容IE,Chrome,FF浏览器)

    现在很多项目都有客户离开网页时,处理一些业务的需求.所以焦点就聚集在了如何获取页面离开事件. 以下是本人在一个项目中需要记录页面浏览时长的处理办法,测试兼容IE,Chrome,FF浏览器 代码如下: ...

  2. listView从底部回到顶部代码实现

    可用如下方法: 1.平滑的回到顶部,但是会划过中间的每一页 mListView.getRefreshableView().smoothScrollToPosition(0); 2.直接跳到顶部 if ...

  3. JS复制内容到剪贴板(兼容FF/Chrome/Safari所有浏览器)

    现在浏览器种类也越来越多,诸如 IE.Firefox.Chrome.Safari等等,因此现在要实现一个js复制内容到剪贴板的小功能就不是一件那么容易的事了. 在FLASH 9 时代,有一个通杀所有浏 ...

  4. JS实现复制到剪贴板(兼容FF/Chrome/Safari所有浏览器)

    现在浏览器种类也越来越多,诸如 IE.Firefox.Chrome.Safari等等,因此现在要实现一个js复制内容到剪贴板的小功能就不是一件那么容易的事了. 在FLASH 9 时代,有一个通杀所有浏 ...

  5. JS回到顶部代码小记

    HTML: <div id="goTop"> <a href="#top"><img src="~/Content/th ...

  6. jquery方法回到顶部代码

    <style> /*默认样式,主要是position:fixed实现屏幕绝对定位*/ #gotoTop{display:none;position:fixed;top:75%;left:5 ...

  7. JS--回到顶部代码

    原文地址:http://www.cnblogs.com/liguiqiang1986/articles/3132023.html JS--回到顶部代码 <!DOCTYPE html PUBLIC ...

  8. dom 回到顶部(兼容IE FF Chrome)

    <!doctype html> <html> <head> <meta charset="utf-8"> <title> ...

  9. IE内嵌google chrome frame解决浏览器兼容问题

    IE内嵌google chrome frame解决浏览器兼容问题  http://www.cnblogs.com/xwdreamer/archive/2013/12/17/3477776.html 参 ...

随机推荐

  1. YouTube上的版权保护

    早在2007年的时候,我曾写过一篇名为“YouTube: The Big Copyright Lie”(YouTube:关于版权的弥天大谎)的文章,表达了我对YouTube又爱又恨的情感纠结: 现在回 ...

  2. android安卓 SQLite教程:内部架构及SQLite使用办法

    SQLite 介绍 SQLite一个非常流行的嵌入式数据库,它支持SQL语言,并且只利用很少的内存就有很好的性能.由于JDBC不适合手机这种内存受限设备,所以Android开发人员需要学习新的API ...

  3. MyBatis中主要类的生命周期和应用范围

    转自:http://ccchhhlll1988-163-com.iteye.com/blog/1420026 MyBatis中常用的类就要数SqlSessionFactoryBuilder.SqlSe ...

  4. 如何在 Visual Studio 2012 控制 TFS 版控時要忽略哪些檔案

    幾乎在任何一種版本控管的機制裡,都會遇到那些「不應該簽入到版本庫」的潛規則,以往我們在用 SVN 的時候,我就寫過幾篇文章要大家注意這點.最近都改用 TFS 做版控,因為大多使用 Visual Stu ...

  5. javascript代码解释执行过程

    javascript是由浏览器解释执行的脚本语言,不同于java c,需要先编译后运行,javascript 由浏览器js解释器进行解释执行,总的过程分为两大块,预编译期和执行期 下面的几个demo解 ...

  6. 云服务器 ECS Linux IO 占用高问题排查方法

    https://help.aliyun.com/knowledge_detail/41224.html?spm=5176.7841174.2.19.uqC1as#使用 iostat 从系统纬度查看磁盘 ...

  7. 终端I/O之终端标识

    历史沿袭至今,在大多数UNIX系统中,控制终端的名字是/dev/tty. POSIX.1提供了一个运行时函数,可被用来确定控制终端的名字. #include <stdio.h> char ...

  8. QT 操作数据库

    整理一下 QT 操作数据库的一些要点,以备以后的查询学习(主要是操作 mysql ). 首先,要查询相关的驱动是否已经装好了,可以用以下的程序进行验证: #include <QtCore/QCo ...

  9. unity中js脚本与c#脚本互相调用

    unity中js脚本与c#脚本互相调用   test1.js function OnGUI() { if(GUI.Button(Rect(25,25,100,30),"JS Call CS& ...

  10. 重构17-Extract Superclass(提取父类)

    当一个类有很多方法希望将它们“提拔”到基类以供同层次的其他类使用时,会经常使用该重构.下面的类包含两个方法,我们希望提取这两个方法并允许其他类使用. public class Dog { public ...