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.ο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兼容与实现相关推荐
- 浏览器兼容问题及解决方法
出现浏览器兼容问题,主要是由于浏览器内核不相同. 对于浏览器兼容问题,总结为HTML.JavaScript兼容,CSS兼容. HTML相关问题易处理,无非高版本浏览器用了低版本浏览器无法识别元素,导致 ...
- js中 scrollHeight、clientHeight、scrollTop的理解
前段时间,自己手写了一个滚动触底加载数据的功能.当时由于时间紧迫,所以也就只是在网上找了一段代码贴上去.也没有很深入的去研究.今天有空,所以自己特意去研究了下它的原理. 滚动触底加载数据,之前我也有写 ...
- ie中常见的js语法兼容问题
参数e表示事件 1.获取滚动距离:滚动条 document.documentElement.scrollTop || document.body.scrollTop document.document ...
- onscroll监听不生效,scrollTop一直为0
监听滚动不生效 window.onscroll = xxxx 不生效 不触发滚动监听 window.addEventListener('scroll', () => { console.warn ...
- 移动端与pc端的区别 及 ios的 兼容性问题
前言:这里移动端主要指 hybrid app 中的H5页面.app 中对页面 样式和功能 的需求会更精细一点. 1.适配: 手机端的尺寸多样,3.5英寸的 iPhone4应该是最小的,只要考虑 兼容到 ...
- jquery 当页面图片加载之后_图片的懒加载和预加载
一.懒加载 [1.1]什么是懒加载? 懒加载也就是延迟加载,指的是在长网页中延迟加载图像,是一种很好优化网页性能的方式.当访问一个页面的时候,先把img元素或是其他元素的背景图片路径替换成一张大小为1 ...
- JavaScript面试题汇总
JavaScript 面试题汇总 1. 根据下面 ES6 构造函数的书写方式,要求写出 ES5 的 class Example { constructor(name) { this.name = na ...
- JavaScript 面试题汇总
JavaScript 面试题汇总 1. 根据下面 ES6 构造函数的书写方式,要求写出 ES5 的 class Example { constructor(name) { this.name = na ...
- 前端知识-JavaScript事件驱动特性
事件驱动3特征 绑定事件 ele.addEventListener('click',function(){});//IE9级以上 ele.attachEvent('on'click',function ...
最新文章
- git 服务器+git linux客户端搭建测试2
- SAP ERP里如何创建一个新的material类型
- python自动点击网页按钮_Python+Selenium使用(二)- 自动点击下一页
- E - 连连看 HDU - 1175(思维的深搜)
- StringStringBuilder的使用
- [Unity] Animation Blend Tree 中混合值变化时部分骨骼错误旋转 360 度的解决办法:将 Humanoid 改成 Generic
- koa2 中间件里面的next到底是什么
- javascrip 的数据类型
- python中进制转换函数_Python内置函数进制转换的用法
- gentoo 修改键盘映射
- win10系统下mysql5.7初始化失败怎么办?
- Learn Git Branching 学习笔记(Git远程仓库篇)
- 转:让老板头疼的90后,管不得?
- html 倒计时特效,JS节日倒计时特效(精确到毫秒)
- Auto.js Pro安卓免ROOT引流脚本开发系列教程28网易公开课(6)-取随机话术
- java版怎么上hypixel,来场速建吧!Hypixel入驻《我的世界》中国版
- 小码农的代码(一)----------SpringJDBC的使用
- 资源分享——Java实现的密码生成器
- 人工智能与大数据行业的兴起,主要产生了哪些新的职位?
- 国科大学习资料--最优化计算方法(王晓)-期末考试真题3
热门文章
- python 爬虫面试题_Python爬虫面试题
- java字节码提取if语句_java – 使用ASM选择和修改`if`语句
- 【面试必备】静态路由与配置相关知识点详解
- 2021年新高考八省联考成绩查询辽宁,辽宁八省联考成绩什么时候出 辽宁八省联考成绩查询入口...
- bitmap画文字 居中_【每日问答29】一键居中CAD表格中的文字
- 14 位大咖导师集结完毕,阿里云云原生加速器就等你来
- 边开飞机边换引擎?我们造了个新功能保障业务流量无损迁移
- 技术解析系列 | PouchContainer 支持 LXCFS 实现高可靠容器隔离
- oracle查询blob数据,C#查询Oracle clob blob数据
- 小程序f2自定义html,微信小程序个人产品添加上传样式设计制作开发教程(2)