查看滚动条的滚动距离
1 window.pageXOffset/pageYOffset
X为横向滚动条的距离 Y为纵向滚动条的距离
IE8及IE8以下不兼容
2 document.body/documentElement .scrollLeft/scrollTop
兼容性比较混乱 用时取两个值相加 因为不可能存在两个同时有值
封装兼容性方法 求滚动轮滚动距离getScrollOffset()
<script>
function getScrollOffset() {
if (window.pageXOffset) {
return {
x: window.pageXOffset,
y: window.pageYOffset
}
}
return {
x : document.documentElement.scrollLeft+document.body.scrollLeft,
y : document.documentElement.scrollTop+document.body.scrollTop
}
}
</script>
查看视口的尺寸
1 window.innerWidth/innerHeight (加上 滚动条宽度 / 高度)
IE8及IE8以下不兼容
2 document.documentElement.clientWidth/clientHeight
标准模式下 任意浏览器都兼容(html顶部写 <!DOCTYPE html>)
3 document.body.clientWidth/clientHeight
适用于怪异模式下的浏览器(html顶部不写 <!DOCTYPE html>)
怪异/混杂模式是向后兼容 即启用后就要试图去兼容之前版本的语法
比如IE7启用怪异模式后 其符合的规则就为IE6
封装兼容性方法,返回浏览器视口尺寸getViewportOffset()
<script>
function getViewportOffset() {
if(window.innerWidth){
return {
w : window.innerWidth,
h : window.innerHeight
}
}else{
if(document.compatMode == 'BackCompat'){
return {
w : document.body.clientWidth,
h : document.body.clientHeight
}
}else{
return {
w : document.documentElement.clientWidth,
h : document.documentElement.clientHeight
}
}
}
}
</script>
查看元素的几何尺寸
domEle.getBoundingClientRect();
兼容性很好 HTML5新出的
该方法返回一个对象,对象里面有left,top,right,bottom等属性
left和top代表该元素左上角的X和Y坐标
right和bottom代表元素右下角的X和Y坐标
height和width属性老版本IE并未实现
返回的结果并不是实时的
查看元素的尺寸
1 dom.offsetWidth dom.offsetHeight
查看元素的位置
2 dom.offsetLeft dom.offsetTop
对于无定位父级的元素 返回相对文档的坐标
对于有定位父级的元素 返回相对于最近的有定位的父级的坐标
(即无论是 left 还是 margin-left 等都算距离 )
3 dom.offsetParent
返回最近的有定位的父级 如无 返回body
注意 body.offsetParent 返回null
让滚动条滚动
window上有三个方法
scroll(),scrollTo()
scrollBy();
三个方法功能类似 用法都是将 x,y 坐标传入 即实现让滚动轮滚动到当前位置
区别:scrollBy()会在之前的数据基础之上做累加
例子:利用scrollBy() 快速阅读的功能
<script>
var start = document.getElementsByTagName('div')[0];
var stop = document.getElementsByTagName('div')[1];
var timer = 0;
var key = true;
start.onclick = function () {
if (key) {
timer = setInterval(function () {
window.scrollBy(0, 10);
}, 100);
key = false;
}
}
stop.onclick = function () {
clearInterval(timer);
key = true;
}
</script>