onsrcoll和scrollTop兼容与实现
对于onscroll事件的支持
各浏览器 document、document.body、document.documentElement 对象的 onscroll 事件的支持存在差异。
所谓的支持性存在差异就是我们常说的浏览器兼容性问题,就是说,对于不同浏览器可能不会按照预期触发相应的事件处理函数。
IE6 | IE7 | IE8 | Firfox | Chrome | Safari | Opera | ||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Q | S | Q | S | Q | S | Q | S | Q | S | Q | S | Q | S | |
window 对象 | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y |
div 对象 | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y |
document 对象 | N | N | N | N | N | N | Y | Y | Y | Y | Y | Y | N | N |
document.body 对象 | Y | N | Y | Y | Y | N | N | N | N | N | N | N | Y | Y |
document.documentElement 对象 | N | Y | N | Y | N | Y | N | N | N | N | N | N | N | N |
所有浏览器支持window对象和普通Div对象的scroll事件。但是要保证窗口或这是Div中出现滚动条才能触发滚动事件。
IE(S)不支持document对象scroll事件,对于如下代码,IE浏览器下不会有任何输出:
<script type="text/javascript">
window.onload = function() {
document.onscroll = function() {
document.getElementById("info").innerHTML = 'OK';
};
}
</script>
<div id="info" style="height:3000px;"></div>
支持性如下:
IE6(S) IE8(S) Firefox Chrome Safari | IE6(Q) IE7 IE8(Q) Opera | |
---|---|---|
document.body.onscroll | 无内容输出 | OK |
相反,IE浏览器支持document.documentElement对象scroll事件,而对于其他浏览器不会有任何输出:
<script type="text/javascript">
window.onload = function() {
document.documentElement.onscroll = function() {
document.getElementById("info").innerHTML = 'OK';
};
}
</script>
<div id="info" style="height:3000px;"></div>
支持性如下:
IE6(S) IE7(S) IE8(S) | IE6(Q) IE7 IE8(Q) Opera Firefox Chrome Safari | |
---|---|---|
document.documentElement.onscroll | OK | 无内容输出 |
但是上述方法都需要浏览器窗口出现滚动条,如果浏览器内部div出现滚动条怎么办?
可以监听鼠标滚动事件:
不同浏览器有不同的滚轮事件,主要是两种,onmousewheel(ff不支持)和DOMMouseScroll(只有ff支持):
if(document.addEventListener){
document.addEventListener(‘DOMMouseScroll’,scrollFunc,false);
}//W3C
window.onmousewheel=document.onmousewheel=scrollFunc;//IE/Opera/Chrome
判断鼠标上滑or下滑:
function scrollFunc(e){
e=e || window.event;
if(e.wheelDelta){//IE/Opera/Chrome
console.info(e.wheelDelta);
}else if(e.detail){//Firefox
console.info(e.detail);
}
}
如果为负数,则是下滑;如果是正数,则是上滑。
scrollTop,是已经滚动过的高度,scrollHeight是整个滚动的高度,
从开始到滚动结束 滚动过的高度,包括滚动元素自身的高度。
contentContainer的scrollTop为a,scrollHeight为b。
监听整个网页的滚动事件,正如上面所说的onscroll实现方法,但是要注意保持兼容性。
现在我们重温一下基础知识,很多时候,我们需要获取body视口高度:在保证完整的<!doctype...声明的前提下,获取body的视口高度为:document.documentElement.clientHeight;
对于要判断div时候滚动到底部,其实只需要判断div已经滚动的 过的距离scrollTop+自己本身的高度offsetHeight是否大于这个div本身的高度:
this.scrollTop+this.offsetHeight>=this.scrollHeight
判断body的滚动条是否滚动 到底部:
window.onscroll=function(){
var scrolltop=Math.max(document.documentElement.scrollTop,document.body.scrollTop);
if(scrolltop+document.documentElement.clientHeight>=document.documentElement.scrollHeight)
alert( 'nowbottom' );
};
更多关于scrollTop的兼容性问题,可以查看:http://www.75team.com/archives/128
onsrcoll和scrollTop兼容与实现的更多相关文章
- input屏蔽历史记录 ;function($,undefined) 前面的分号是什么用处 JSON 和 JSONP 两兄弟 document.body.scrollTop与document.documentElement.scrollTop兼容 URL中的# 网站性能优化 前端必知的ajax 简单理解同步与异步 那些年,我们被耍过的bug——has
input屏蔽历史记录 设置input的扩展属性autocomplete 为off即可 ;function($,undefined) 前面的分号是什么用处 ;(function($){$.ex ...
- 获取scrollTop兼容各浏览器的方法,以及body和documentElement
1.各浏览器下 scrollTop的差异 IE6/7/8: 对于没有doctype声明的页面里可以使用 document.body.scrollTop 来获取 scrollTop高度 : 对于有do ...
- 【转】获取scrollTop兼容各浏览器的方法,以及body和documentElement是啥?
1.各浏览器下 scrollTop的差异 IE6/7/8: 对于没有doctype声明的页面里可以使用 document.body.scrollTop 来获取 scrollTop高度 : 对于有do ...
- scrollTop兼容处理
使用jQuery2.0以下版本的scrollTop()函数来设置当然兼容性当然很好,但有时需要为滚动设置滑动效果.比如,使用animate函数,这里需要做些兼容性处理: 实例:http://sandb ...
- 关于scrolltop 兼容 IE6/7/8, Safari,FF的方法
1.各浏览器下 scrollTop的差异IE6/7/8:对于没有doctype声明的页面里可以使用 document.body.scrollTop 来获取 scrollTop高度 :对于有docty ...
- document.body.scrollTop与document.documentElement.scrollTop兼容
这两天在写一个JS的网页右键菜单,在实现菜单定位的时候发现了这个问题:chrome居然不认识document.documentElement.scrollTop! 看前辈们的文章,纷纷表示如果有文档声 ...
- scrollTop兼容封装
<!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8&quo ...
- scrollTop 值为 0
由scrollTop兼容问题引起: 在 Firefox 和 IE 中,使用 document.documentElement.scrollTop 获取: 在 Chrome 中,使用 document. ...
- js,jQuery实现可关闭悬浮框广告特效,兼容(谷歌,火狐,Ie)
注意不能直接用close()命名关闭广告函数,避免冲突. javascript实现方法: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Tr ...
随机推荐
- swift - 网络请求数据处理 - 协议处理
1. 在类的模型之中或类的结构体 里面 实现下面方法 /// 添加预约数据源模型 - rootModel class DataModelForAddNewBespeakModel: NSObject ...
- CentOS 7安装zabbix步骤
Zabbix配置安装 1.前期准备: 我自己的基础环境:CentOS 7 + Mysql 5.6 可以根据官网介绍一步一步安装,官网地址:https://www.zabbix.com/ 图1: 然后点 ...
- oracle pl/sql程序
简单的pl/sql程序 declare begin dbms_output.put_line('hello world'); end; 什么是PL/SQL? pl/sql(Procedure lang ...
- VBA json parser[z]
http://www.ediy.co.nz/vbjson-json-parser-library-in-vb6-xidc55680.html VB-JSON: A Visual Basic 6 (VB ...
- c#/vb调用c编写的标准dll
准备: 首先打开vc++ 6.0新建工程,选择Win32 Dynamic Link-Library,命名为stdLibrary 新建library.cpp文件,内容如下 #include <st ...
- debuginfo介绍
一.简介 深入理解debuginfo http://blog.csdn.net/chinainvent/article/details/24129311?reload 关于DWARF http://w ...
- Js中的this关键字(吉木自学)
研究生毕业答辩完,开始继续为转行努力.小白要奋斗了,加油.本文引自JS核心系列:浅谈函数的作用域. 在一个函数中,this总是指向当前函数的所有者对象,this总是在运行时才能确定其具体的指向, 也才 ...
- 详解python2 和 python3的区别-乾颐堂
看到这个题目大家可能猜到了我接下来要讲些什么,呵呵,对了,那就是列出这两个不同版本间的却别!搜索一下大家就会知道,python有两个主要的版本,python2 和 python3 ,但是python又 ...
- 品味性能之道<八>:Loadrunner关联技巧与字符处理
一.概述 Loadrunner作为HP出品的性能测试工具,拥有太多奇妙魔法甜点供予性能测试人员享用,其中吃起来比较有嚼劲的那就是关联了.当然在关联之后我们还需要一些简单的字符处理,用以生成 ...
- mysql 1045 access denied for user********
另一个方法Windows: 1. 管理员登陆系统,停止mysql服务或者结束mysqld-nt进程2. 进入命令行,来到mysql的安装目录.假设安装目录为 d:/mysql/ , CMD进入命令行3 ...