BOM
window对象
窗口关系
- window.top始终指向最上层窗口
- window.parent始终指向当前窗口的父窗口
- window.self始终指向自身
窗口位置和像素比
- window.screenLeft、window.screenX表示窗口相对于屏幕左侧的距离
- window.screenTop、window.screenY表示窗口相对于屏幕顶部的距离
- moveTo()和moveBy(),移动窗口的位置
- window.devicePixelRatio表示物理像素与逻辑像素之间的缩放系数
窗口大小
- innerWidth和outerWidth
- resizeTo和resizeBy缩放到固定的大小
视口位置
- window.pageXoffset和window.scrollX
- window.pageYoffset和window.scrollY
- scrollTo、scrollBy滚动距离
1 2 3 4 5
| window.scrollTo({ left: 100, top: 100, behavior: 'auto' })
|
location对象
1 2 3 4 5 6 7 8 9 10 11 12 13
| location.href location.hash location.host location.hostname location.pathname location.port location.protocol location.search location.origin let qs = "?q=javascript" let params = new URLSearchParams(qs) params.set('name', 'test') params.toString()
|
操作地址
1 2 3 4 5 6 7
| location.assign("http://www.wrox.com") location.href = "http://www.wrox.com";
location.replace("http://www.wrox.com") location.reload() location.reload(true)
|
history对象
导航
1 2 3 4
| history.go(-1) history.go(1) history.back() history.forward()
|
状态管理
1 2
| let state = { foo: 'bar' } history.pushState(state, 'new title', 'baz.html')
|
执行pushState后,状态信息会被推送到历史记录,同时浏览器地址栏会改变以反映新的相对URL,浏览器不会向服务器发起请求
1 2 3 4 5 6 7 8 9
| window.addEventListener("popstate", (event) => { let state = event.state if (state) { processState(state) } }) history.replaceState({ foo: 'bar'}, 'new title')
|
state对象中应该只包含可以被序列化的信息,同时在使用HTML5状态管理时,要确保通过pushState()创建的每个“假”URL背后都对应着服务器上一个真实的物理URL,否则单击刷新会导致404错误,所有的SPA框架都必须通过某些配置解决这个问题