对于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.οnscrοll=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

转载于:https://www.cnblogs.com/0603ljx/p/4972784.html

onsrcoll和scrollTop兼容与实现相关推荐

  1. 浏览器兼容问题及解决方法

    出现浏览器兼容问题,主要是由于浏览器内核不相同. 对于浏览器兼容问题,总结为HTML.JavaScript兼容,CSS兼容. HTML相关问题易处理,无非高版本浏览器用了低版本浏览器无法识别元素,导致 ...

  2. js中 scrollHeight、clientHeight、scrollTop的理解

    前段时间,自己手写了一个滚动触底加载数据的功能.当时由于时间紧迫,所以也就只是在网上找了一段代码贴上去.也没有很深入的去研究.今天有空,所以自己特意去研究了下它的原理. 滚动触底加载数据,之前我也有写 ...

  3. ie中常见的js语法兼容问题

    参数e表示事件 1.获取滚动距离:滚动条 document.documentElement.scrollTop || document.body.scrollTop document.document ...

  4. onscroll监听不生效,scrollTop一直为0

    监听滚动不生效 window.onscroll = xxxx 不生效 不触发滚动监听 window.addEventListener('scroll', () => { console.warn ...

  5. 移动端与pc端的区别 及 ios的 兼容性问题

    前言:这里移动端主要指 hybrid app 中的H5页面.app 中对页面 样式和功能 的需求会更精细一点. 1.适配: 手机端的尺寸多样,3.5英寸的 iPhone4应该是最小的,只要考虑 兼容到 ...

  6. jquery 当页面图片加载之后_图片的懒加载和预加载

    一.懒加载 [1.1]什么是懒加载? 懒加载也就是延迟加载,指的是在长网页中延迟加载图像,是一种很好优化网页性能的方式.当访问一个页面的时候,先把img元素或是其他元素的背景图片路径替换成一张大小为1 ...

  7. JavaScript面试题汇总

    JavaScript 面试题汇总 1. 根据下面 ES6 构造函数的书写方式,要求写出 ES5 的 class Example { constructor(name) { this.name = na ...

  8. JavaScript 面试题汇总

    JavaScript 面试题汇总 1. 根据下面 ES6 构造函数的书写方式,要求写出 ES5 的 class Example { constructor(name) { this.name = na ...

  9. 前端知识-JavaScript事件驱动特性

    事件驱动3特征 绑定事件 ele.addEventListener('click',function(){});//IE9级以上 ele.attachEvent('on'click',function ...

最新文章

  1. git 服务器+git linux客户端搭建测试2
  2. SAP ERP里如何创建一个新的material类型
  3. python自动点击网页按钮_Python+Selenium使用(二)- 自动点击下一页
  4. E - 连连看 HDU - 1175(思维的深搜)
  5. StringStringBuilder的使用
  6. [Unity] Animation Blend Tree 中混合值变化时部分骨骼错误旋转 360 度的解决办法:将 Humanoid 改成 Generic
  7. koa2 中间件里面的next到底是什么
  8. javascrip 的数据类型
  9. python中进制转换函数_Python内置函数进制转换的用法
  10. gentoo 修改键盘映射
  11. win10系统下mysql5.7初始化失败怎么办?
  12. Learn Git Branching 学习笔记(Git远程仓库篇)
  13. 转:让老板头疼的90后,管不得?
  14. html 倒计时特效,JS节日倒计时特效(精确到毫秒)
  15. Auto.js Pro安卓免ROOT引流脚本开发系列教程28网易公开课(6)-取随机话术
  16. java版怎么上hypixel,来场速建吧!Hypixel入驻《我的世界》中国版
  17. 小码农的代码(一)----------SpringJDBC的使用
  18. 资源分享——Java实现的密码生成器
  19. 人工智能与大数据行业的兴起,主要产生了哪些新的职位?
  20. 国科大学习资料--最优化计算方法(王晓)-期末考试真题3

热门文章

  1. python 爬虫面试题_Python爬虫面试题
  2. java字节码提取if语句_java – 使用ASM选择和修改`if`语句
  3. 【面试必备】静态路由与配置相关知识点详解
  4. 2021年新高考八省联考成绩查询辽宁,辽宁八省联考成绩什么时候出 辽宁八省联考成绩查询入口...
  5. bitmap画文字 居中_【每日问答29】一键居中CAD表格中的文字
  6. 14 位大咖导师集结完毕,阿里云云原生加速器就等你来
  7. 边开飞机边换引擎?我们造了个新功能保障业务流量无损迁移
  8. 技术解析系列 | PouchContainer 支持 LXCFS 实现高可靠容器隔离
  9. oracle查询blob数据,C#查询Oracle clob blob数据
  10. 小程序f2自定义html,微信小程序个人产品添加上传样式设计制作开发教程(2)