浏览器滚动长度window.pageXOffset、window.pageYOffset
chrome浏览器
(1)、document.body.scrollLeft/scrollTop
(2)、document.documentElement.scrollLeft/scrollTop
(1)(2)方法兼容性互斥
window.pageXOffset/pageYOffset(只读属性) 别名 window.scrollX/ window.scrollY
不常用:window.scrollX/scrollY
document.documentElement.scrollLeft/scrollTop chrome不可用
滚动高度方法的封装
function getScrollOffset() {
if(window.pageXOffset){
return {
left: window.pageXOffset,
top: window.pageYOffset
}
}else{
return {
left: document.body.scrollLeft+document.documentElement.scrollLeft,
top: document.body.scrollTop+document.documentElement.scrollTop,
}
}
}
浏览器的标准模式与怪异模式
定义:
浏览器的标准模式指的符合w3c标准的,怪异模式指的是符合自己标准的浏览器
document.compatMode
“CSS1Compat” 是符合w3c规范的模式,标准模式
如果将<!DOCTYPE html>去掉
document.compatMode=‘BackCompat’怪异模式
浏览器可视区域的尺寸
常规:window.innerWidth/innerHeight
浏览器窗口的视口(viewport)高度(以像素为单位);如果有水平滚动条,也包括滚动条高度。
IE9及以下使用: docuemnt.documentElement.clientHeight/clinetWidth
怪异:document.body.clientWidth/clientHeight
clientHeight不包含滚动条的高度
封装方法
function getViewportSize(){
if(window.innerWidth){
return {
width: window.innerWidth,
height: window.innerHeight
}
}else{
if(document.compatMode==='BackCompat'){
return {
width: document.body.clientWidth,
height: document.body.clientHeight
}
}else{
return {
width:document.documentElement.clientWidth,
height: document.documentElement.clientHeight
}
}
}
}
scrollHeight、scrollWidth
Element.scrollWidth这个只读属性是元素内容宽度的一种度量,包括由于overflow溢出而在屏幕上不可见
的内容,它包括边框,外边距或垂直滚动条
docuemnt.body.scrollHeight/scrollWidth
docuemnt.documentElement.scrollHeight/scrollWidth
scrollWidth=window.innerWidth+window.pageXOffset
function getScrollSize(){
if(document.body.scrollWidth){
return {
width: document.body.scrollWidth,
height:docuemnt.body.scrollHeight
}
}else{
return {
width: docuemnt.documentElement.scrollWidth,
height:docuemnt.documentElement.scrollHeight
}
}
}
offsetTop/offsetLeft/offsetParent
offsetParent找哪个祖先有定位的元素
offsetTop/offsetLeft相对于定位的父级的距离,如果父级都没定位,则是相对于body的距离
offsetWidth/offsetHeight:HTMLElement.offsetWidth是一个只读属性,返回一个元素的布局宽度
function getElementDocPosition() {
var parent=el.offsetParent,
offsetLeft=el.offsetLeft,
offsetTop=el.offsetTop;
while(parent){
offsetLeft+=parent.offsetLeft;
offsetTop+=parent.offsetTop;
parent=parent.offsetParent;
}
return {
left: offsetLeft,
top: offsetTop
}
}
window.scrollTo/scroll
两者执行的效果一样,都是滚动的距离
window.scroll(100,1000)
scrollBy在原来的基础上移动的距离
window.scrollBy(200,200)
两个作业:
1.一个自动滚动的阅读器
2.回到顶部