BOM对象
BOM
概述
BOM(Browser Object Mode)浏览器对象模型,是Javascript的重要组成部分。它提供了一系列对象用于与浏览器窗口进行交互,这些对象通常统称为BOM。
各内置对象之间按照某种层次组织起来的模型统称为Bom浏览器对象模型
BOM的共有对象
- window 窗口对象(浏览器的global对象)
- location 地址栏对象
- history 历史对象
- navigator 导航对象(浏览器信息对象)
- screen 屏幕对象(适配)
- frames 框架对象(其实也是个window)
- document 文档对象
window
概述
window窗口对象,他是浏览器的global对象,他包含所有的全局变量。
属性
caches 返回一个缓存对象 CacheStorage
closed 是否关闭(默认值为false)
cookieStore 存储cookie的空间
crossOriginIsolated cors设置(跨域设置)
innerHeight 窗口可操作区域的高度
innerWidth 窗口可操作区域的宽度
indexedDB 浏览器内置数据库对象
localStorage 本地存储
sessionStorage 他是session生命周期本地存储
chrome 谷歌内核的属性
console 控制台
scrollX 滚动栏的坐标 scrollY 滚动栏的坐标
….
其他的所有对象都是window对象的属性 window可以被省略
方法
打印方法(控制台打印方法)
1 | // 控制台打印方法 |
弹框方法
- alert 弹信息框 没有返回值
- prompt 弹输入框 有返回值返回值为输入的内容 (string)
- confirm 弹选择框 有返回值 返回为boolean类型
1 | //弹窗 |
打开窗口的方法 open
1 | document.getElementById('openBtn').onclick = function(){ |
关闭窗口的方法 close (只能关闭当前窗口)
1 | document.getElementById('closeBtn').onclick = function(){ |
改变窗口位置的方法
- moveTo
- moveBy
1 | //moveTo 给定实际坐标 moveBy 给定变化的距离 |
改变窗口大小的方法
- resizeTo
- resizeBy
1 | //resizeTo 给定实际大小 resizeBy 在当前下发生变化 |
改变的滚动栏位置的方法 (*)
- scrollTo
- scrollBy
1 | document.getElementById('scrollToBtn').onclick = function(){ |
打印机功能调用 print打印方法 (*)
- print (打印的基础实现)
1 | window.print() |
find 查找
1 | window.find() |
窗口 foucs 获取焦点 blur 失去焦点
1 | window.foucs() |
setInterval 和 setTimeout
clearInterval 和 clearTimeout
fetch 发送一个异步请求 (*)
1 | //fetch 异步的请求 Axios的底层实现 (内核为xhr) |
Location (*)
概述
location是地址栏对象,他可以获取地址栏上的所有信息。
1 | https://mbd.baidu.com/newspage/data/landingsuper?context=%7B%22nid%22%3A%22news_9664507230212976443%22%7D&n_type=-1&p_from=-1 |
- https:// 协议
- mbd.baidu.com 域名(解析ip+端口号)
- 浏览器访问根据协议的不同指定不同的端口号 80端口http 443端口https
- /newspage/data/landingsuper 路径地址
- ?context=%7B%22nid%22%3A%22news_9664507230212976443%22%7D&n_type=-1&p_from=-1 传递参数(get请求)
location的相关属性(都支持赋值)
- hash 获取#后面携带的内容(#通常在最后面)
- host 主机 ip地址+端口号
- hostname 主机名 ip地址
- href url路径
- port 端口号
- pathname 路径名
- search 获取?后面传递的参数
- protocol 协议
- origin 跨域地址
- ancestorOrigins 获取倒序排列的文档对象及来源的浏览器上下文 (插件开发)
1 | console.log(location) |
location的方法
- assgin 跳转页面 (会产生历史页面)
- replace 替换url跳转页面
- reload 重新加载页面
1 | //获取元素 |
练习
https://www.baidu.com/s?ie=UTF-8&wd=mdn&tn=15007414_dg 解析这个url
1 | let url = 'https://www.baidu.com/s?ie=UTF-8&wd=mdn&tn=15007414 dg' |
history (*)
概述
history对象是历史对象,他记录所有的历史页面。
history的属性
- length 历史页面个数(包含当前页面)
- state 值 (默认值为null)
- scrollRestoration 滚动恢复属性 (auto || manual)
history的方法
- forward 前进
- back 后退
- go 去任意历史页面
1 | //常用的方法 前进 后退 任意跳转 事件会自动传递参数 参数叫event |
- pushstate 添加一个state(新增历史页面)
- replacestate 替换state (不会新增历史页面)
1 | document.getElementById('pushstate').onclick = function(){ |
pushstate及replacestate都会进行的操作
会影响state值 会改变url地址 但是不会跳转页面(页面不会刷新)
navigator
概述
navigator他是属于浏览器的导航对象,里面包含浏览器的相关信息以及你的系统信息。
属性
1 | //携带 浏览器版本信息以及系统版本信息兼容 |
screen 屏幕
概述
用于屏幕相关信息 (适配 大屏可视化)
属性
- width 屏幕宽
- height 屏幕高
- availWidth 屏幕可视区宽度
- availHeight 屏幕可视区高度
- availLeft 屏幕可视区离左边的距离
- availTop 屏幕可视区离上边的距离
1 | console.log(screen.width)//宽 |
document
概述
document是文档对象,他指代的是html整个文档。包含用于操作对应的html文档的相关内容。他是整个DOM里面最大的对象,他是属于BOM的。
相关属性
- body 获取body
- forms 获取所有的表单
- head 获取head
1 | console.log(document.body) |
BOM是路由的底层实现,所有的前端JS框架的路由底层都是BOM。
页面跳转的方式汇总
- location.replace()
- location.assgin()
- location.href
- loaction = location
- history.go
- history.forward
- history.back
路由
概述
根据不同的url地址来给你渲染不同的内容,路由主要分为俩种。前端路由,后端路由。
后端路由
后端介绍
后端 主要提供数据的,以及对应的数据进行相关的业务处理。后端用到的语言主要java,php,node.js…
后端路由
接口路由 (json格式 restful接口)
根据不同的接口返回不同的数据
渲染路由 (ssr 服务器渲染 前后端不分离)
根据不同的url地址来渲染不同的页面 (后端服务器的压力大)
优点
利于seo (搜索引擎优化)
首页渲染速度快 (主页都是做ssr)
缺点
服务器压力大
维护不便
前端路由
根据不同url地址来渲染不同的页面(浏览器解析)
前端路由划分
页面路由 (根据不同的url跳转不同的页面 (刷新操作))
1 | location.href = 地址 |
hash路由 (根据不同hash值渲染不同的内容 不刷新)
1 | <body> |
history路由 (根据不同的url来渲染不同的内容 不刷新)
1 | <body> |
hash路由和history路由常用于SPA(单页应用程序)程序,不刷新页面也能实现视图的切换。所以对应的在vue或者react的路由底层设计中只有俩种模式一种为hash模式一种为history模式。这种程序一般运用在前后端分离的基础上。
单页应用程序的优缺点
优点
无刷新 减少了页面的回流(重新渲染)
业务更加清晰 代码结构更加明了
缺点
不利于seo
所以为了解决单页应用不利于seo的问题出现了一个新的技术叫预渲染