JavaScript滚动距离的封装

引用自某培训机构教学视频

由于JavaScript的scroll方法存在浏览器兼容问题
所以学习过程中总结了可能出现的情况

兼容问题与解决

兼容性问题:

谷歌浏览器 和没有声明 DTD:
document.body.scrollTop;
火狐 和其他浏览器:
document.documentElement.scrollTop;
ie9+ 和 最新浏览器 都认识:
window.pageXOffset; pageYOffsetscrollTop);

兼容性写法:

1
var scrollTop = window.pageYOffset || document.documentElement.scrollTop|| document.body.scrollTop || 0;

scroll函数

封装获取scrollTop和scrollLeft

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
function scroll() {
if(window.pageYOffset != null) // ie9+ 和其他浏览器
{
return {
left: window.pageXOffset,
top: window.pageYOffset
}
}
else if(document.compatMode == "CSS1Compat") // 声明的了 DTD
// 检测是不是怪异模式的浏览器 -- 就是没有 声明<!DOCTYPE html>
{
return {
left: document.documentElement.scrollLeft,
top: document.documentElement.scrollTop
}
}
return { // 剩下的肯定是怪异模式的
left: document.body.scrollLeft,
top: document.body.scrollTop
}
}
window.onscroll = function() { //滚都时触发在控制台打印出scroll().top值
console.log(scroll().top);
}

使用方法 scroll().top scroll().left