区域的尺寸和位置
获取和设置滚动的位置
获取滚动位置:
-
dom元素:dom.scrollTop和dom.scrollLeft
-
页面区域:document.documentElement.scrollTop|scrollLeft或document.body.scrollTop|scrollLeft
一部分浏览器支持前者且后者得到0,另外一部分浏览器支持后者且前者得到0,因此可以使用兼容性写法:
var pageScroll = { scrollTop: document.documentElement.scrollTop + document.body.scrollTop, scrollLeft: document.documentElement.scrollLeft + document.body.scrollLeft, }
设置滚动位置:修改相应区域的scrollTop和scrollLeft属性的值即可设置滚动的位置
获取外界的尺寸
获取屏幕的宽度和高度:window.screen.width、window.screen.height
获取浏览器窗口的宽度和高度:window.outerWidth、window.outerHeight
获取视口的宽度和高度:window.innerWidth、window.innerHeight
获取视口的宽度和高度,但不包含滚动条本身所占空间:document.documentElement.clientWidth、document.documentElement.clientHeight
注意:
-
css中的尺寸单位90vw等同于window.innerWidth * 0.9个px的效果,90vh等同于window.innerHeight * 0.9个px的效果
-
给html元素或body元素设置滚动条,其实是在给视口设置滚动条,会导致document.documentElement.clientWidth|clientHeight发生变化,而其它元素则不是
<!DOCTYPE html> <style> body { margin: 0; /* overflow: scroll; */ } </style> <script> console.log(document.documentElement.clientWidth); </script><!DOCTYPE html> <style> body{ margin: 0; } #div{ width: 100vw; height: 100vh; /* overflow: scroll; */ } </style> <div id="div"></div> <script> console.log(document.documentElement.clientWidth); </script> -
当文档中的内容在显示时超出了视口的尺寸,浏览器会自动给视口添加滚动条
-
html元素的自动宽度为document.documentElement.clientWidth,但html元素的自动高度却不是document.documentElement.clientHeight
扩展:
document.documentElement.clientWidth|clientHeight的值所代表的含义是受文档声明影响的,在有文档声明的情况下,它代表不考虑滚动条区域的视口的尺寸;在没有文档声明的情况下,则它等于html元素的填充盒尺寸
<!-- <!DOCTYPE html> --> <html> <style> html{ width: 10px; height: 10px; padding: 30px; border: 10px solid; margin: 20px; /* overflow: scroll; */ } </style> <script> console.log(document.documentElement.clientWidth, document.documentElement.clientHeight); </script> </html>
获取元素的尺寸
包含滚动条本身所占区域,包含边框区域,不包含元素的溢出区域:dom.offsetWidth、dom.offsetHeight
不包含滚动条本身所占空间,不包含边框区域,不包含元素的溢出区域:dom.clientWidth、dom.clientHeight
不包含滚动条本身所占空间,不包含边框区域,包含元素的溢出区域:dom.scrollWidth、dom.scrollHeight
当元素没有溢出区域时,dom.scrollWidth、dom.scrollHeight等效于dom.clientWidth和dom.clientHeight
补充
-
dom.offsetParent
获取dom元素的第一个定位的祖先元素(不管dom是否是定位元素),找到body时就停止,此时将直接返回body
对于body.offsetParent,始终返回null
-
dom.offsetLeft、dom.offsetTop
若dom.offsetParent不是body,则返回dom的边框盒左上角相对于dom.offsetParent的填充盒左上角的距离
若dom.offsetParent是body,但body是定位元素,则返回dom的边框盒左上角相对于body的边框盒左上角的距离
若dom.offsetParent是body,但且body不是定位元素,则返回dom的边框盒左上角相对于页面左上角的距离
对于body的offsetLeft和offsetTop,始终返回0
-
dom.getBoundingClientRect()
该方法会返回一个对象,对象中记录了dom的尺寸以及dom相对于视口左上角的距离
width、height:dom的边框盒的宽高
left、x:dom的边框盒的左端距离视口左端的距离
top、y:dom的边框盒的上端距离视口上端的距离
right:dom的边框盒的右端距离视口左端的距离
bottom:dom的边框盒的下端距离视口上端的距离
注意:该方法返回的对象不是实时的,并且该方法会将元素的滚动条所在空间计算在内
-
window.scrollX、window.pageXoffset相等于根元素的scrollLeft
window.scrollY、window.pageYoffset相等于根元素的scrollTop
-
window|dom.scrollTo(x, y)
设置滚动位置,直接滚动到(x, y)位置
-
window|dom.scrollBy(x, y)
设置滚动位置,在原来位置的基础上增加x、y的滚动距离
-
window.resizeTo(width, height)
设置窗口尺寸,直接将窗口尺寸设置为width、height
该方法只能设置用JS创建出的新窗口,用户打开的窗口无法设置
-
window.resizeBy(width, height)
设置窗口尺寸,在原窗口尺寸的基础上增加width、height的尺寸
该方法只能设置用JS创建出的新窗口,用户打开的窗口无法设置
注意:上面所有获取元素尺寸和位置的方式,都将导致页面重排
计时器
- window.setTimeOut(fn, duration)
- window.setInterval(fn, duration)
计时器函数会返回一个数字,表示计时器的编号,在清除定时器时就需要用到该编号
- window.clearTimeOut(id)
- window.clearInterval(id)
注意:清除计时器后,正在等待时间到达的回调函数也将停止等待并取消执行,即不可能出现清除定时器后还多执行一次回调函数的情况
使用timeout实现interval:
var timer; function deleteInterval(timer){ clearTimeout(timer); } function createInterval(callback, duration){ timer = setTimeout(function(){ callback(); createInterval(callback, duration); }, duration); } createInterval(function(){ console.log("interval"); }, 1000); // 一段时间后 deleteInterval(timer);虽然上面的模式像是递归,但实际上不是递归,原因是计时器内的回调函数是异步执行的,计时器后面的代码并不会等到计时器中的回调函数运行后才去运行。当定时器中的回调函数执行时,外层函数早已执行完成,并从函数调用栈中退出了
window对象
-
open("页面路径", target, "其它配置")
打开一个新窗口
target等同于a元素的target
该函数会返回一个新的window对象
-
alert()
弹出框
-
confirm()
确认框
-
prompt()
提示框
对象成员
-
document
-
location
地址栏对象
属性 描述 hash 返回URL的锚部分 host 返回URL的主机名和端口号 hostname 返回URL的主机名 href 返回完整的URL pathname 返回URL的路径 port 返回URL的端口号 protocol 返回URL的协议 search 返回URL的query 以上所有属性都可以更改,更改的值将会应用到浏览器中
方法 描述 reload() 刷新当前页面 -
navigator
不要用
-
history
方法 描述 forword() 前进一个页面 back() 后退一个页面 go(n) 前进n个页面 -
console
成员 描述 log(param) 打印param的valueOf方法的返回值 dir(param) 打印param的对象结构 time() 开启记时,与timeEnd()配合使用 timeEnd() 结束并打印记时时长,与time()配合使用