简单了解Bom 及常用api

248 阅读5分钟

BOM 的概念和常用 API

  • BOM 就是Borrow object Model 浏览器对象模型
  • 常用api接口
    • window.location.assign('需要跳转的页面')
    • window.reload() 刷新页面
    • window.history.forward() 前进类似网页的前进功能 但是需要在前进有网页的情况下
    • window.back()后退 同理
    • 浏览器信息 window.navigator
    • appVersion 浏览器当前版本信息
    • 让浏览器出现一个弹出框(alert/prompt/confirm)
  • BOM 的核心就是 window 对象
  • window 是浏览器内置的一个对象, 里面包含着操作浏览器的方法

获取浏览器窗口的尺寸(包含滚动条)

  • window.innerHeight() 获取浏览器高度
  • window.innerWidth() 获取浏览器宽度

浏览器的弹出层 (confirm / alert / prompt)

  • alert() 可以吧需要的数据弹窗输出
  • prompt() 可以获取到用户输入的信息
  • confirm() 返回布尔值 点击确定返回true 取消返回false

浏览器的本地存储(localStorage---sessionStorage---cookie)

  • -localstorage 本地储存

    • 只能存基础数据类型(一般为字符串), 不能存储复杂数据类型 将数据储存在浏览器 一般应用与免登录 就是类似记住密码
    • 语法 localStorage.setItem('key','value') 以字符串的方式储存 获取方法 localStorage.getItem('key') 可以获取到key 和对应的value 清除方法 * removeItem('key') * clear('key')
     // 增
     window.localStorage.setItem(key, value)
     // 删
     window.localStorage.removeItem(key)
     // 清除
     window.localStorage.clear()
     /**
      * 查
      *      有      --->    返回对应的 value
      *      没有    --->    返回 Null
     */
     window.localStorage.getItem(key)
    
  • sessionstorage 与 localStorage类似 但是 sessionstorage 会在界面关闭后消失 而 localStorage会永久储存在浏览器 除非手动删除 语法相同

    • 浏览器的本地存储, 临时存储, 关闭浏览器以后, 存储内容自动消失
    • 想要跨页面通讯, 必须是从本页面跳转的才可以
   // 增
   window.sessionStorage.setItem(key, value)
   // 删
   window.sessionStorage.removeItem(key)
   // 清除
   window.sessionStorage.clear()
   /**
    * 查
    *      有      --->    返回对应的 value
    *      没有    --->    返回 Null
   */
   window.sessionStorage.getItem(key)
  • cookie
    • 只能储存字符串,且格式固定
      • js 'key=value'
    • 储存大小有限制
      • 4kb左右
    • 存储有时效性
      • 默认是会话级别 就是关闭浏览器便会清除
      • 但是可以手动设置过期时间
    • 跟随前后端请求
      • 只要是有cookie缓存 都会跟随
      • 和后端交互时便会跟随
    • 可以被后端操作
    • 储存依赖域名
      • 不能跨域名通讯
      • 只能在当前域名下使用 也就是存储域名下可以使用
// 设置 cookie
document.cookie = 'a=100'

// 设置一条带有过期时间的 cookie
var time = new Date()
document.cookie = 'a=100;expires=' + time //expires 设置过期时间

// 设置一条 30s 以后过期的 cookie
var time = new Date()
time.setTime(time.getTime() - 1000 * 60 * 60 * 8 + 1000 * 30)
document.cookie = 'a=100;expires=' + time

// 获取 cookie
document.cookie

localStorage : 硬盘存储 sessionStorage : 内存存储

  • 三者的差异(出现时间-存储大小-前后端交互-前后端操作-过期时间)

    1. 出现时间
      • cookie: 有 JS 就有了
      • storage: H5 出现后才有
    2. 存储大小
      • cookie: 4k 左右
      • storage: 20MB 左右
    3. 前后端交互
      • cookie: 会随着当前页面的请求自动携带
      • storage: 不会跟随请求自动携带
    4. 前后端操作
      • cookie: 前后端语言都可以操作
      • storage: 只能前端 JS 操作
    5. 过期时间
      • cookie: 默认是会话, 可以手动设置过期时间
      • storage: 不能手动设置
    • localStorage 和 sessionStorage 的区别
      • 过期时间
        • localStorage: 永久存储, 除非手动清除
        • sessionStorage: 临时存储
      • 跨页面通讯
        • localStorage: 直接跨页面通讯
        • sessionStorage: 只能是当前窗口跳转的页面才可以通讯
      • 共同点
        • 只能存储字符串, 不能存储复杂数据类型
        • 存储其他数据类型的时候, 获取回来的也是 字符串类型

浏览器的地址信息 (location)

  • location.href 页面跳转 js window.location.href = 'https://www.baidu.com'

  • location.reload 页面刷新

浏览器的版本信息 navigator (了解)

  • window 中的 navigator 可以获取到浏览器的信息

浏览器的 onload 事件

  • window.onload:界面上所有内容加载完毕之后才触发这个事件 语法
window.onload = function () {
           js代码书写区域 这里代码会在界面加载完成后才开始执行
}
  • 在浏览器中, 把 JS 写在 head 中, JS 在加载时 DOM 还没加载完, 可能会导致获取 DOM 时出现问题, 但是如果把代码放在 onload 事件中, 则不会出现问题
  • 如果把 JS 写在 body 底部, 则写不写 onload 都一样

浏览器的 onscroll 事件

  • scroll 即滚动条 就是当页面触发滚动条时触发的事件 代码语法和onload事件类似
window.onscroll = function () {
    要执行的代码 (在触发滚动条时执行)
}

浏览器的滚动距离

  • 浏览器的内容可以滚动, 那么我们就可以获取到浏览器滚动的距离
  • 但是需要思考一个问题
    • 浏览器真的滚动了吗?
    • 其实浏览器没有滚动, 一直在那里, 滚动的是浏览器的页面
    • 所以说: 其实浏览器没动, 只不过页面向上走了
  • 所以这个已经不能单纯的算是浏览器的内容了, 而是我们页面的内容
  • 所以不再是使用 window 对象了, 而是使用 document 对象
scrollTop 就是获取页面向上滚动的距离
  • 获取方式
    • document.body.scrollTop 没有 :!DOCTYPE
    • document.documentElement.scrollTop 页面声明:!DOCTYPE的时候只能用document.documentElement.scrollTop
window.onscroll = function () {
    var ss = document.body.scrollTop
    var sss = document.documentElement.scrollTop
    console.log(ss, sss)
}
  • 区别
    • IE 浏览器(了解)
      • 没有 DOCTYPE 声明的时候, 用这两个都行
      • DOCTYPE 声明的时候, 只能用 document.documentElement.scrollTop
    • Chorme 和 FireFox
      • 没有 DOCTYPE 声明的时候, 用 document.body.scrollTop
      • DOCTYPE 声明的时候, 用 document.documentElement.scrollTop
    • Safari
      • 两个都不用, 使用一个单独的方法 window.pageYOffset
scrollLeft
  • 获取页面向左滚动的距离
    • document.body.scrollLeft 同理
    • document.documentElement.scrollLeft
window.onscroll = function () {
    console.log(document.body.scrollLeft)
    console.log(document.documentElement.scrollLeft)
}