JavaScript BOM

发布于:2023-01-16 ⋅ 阅读:(372) ⋅ 点赞:(0)

项目开发中,经常会遇到处理浏览器版本兼容性问题,我们如何判断用户使用的浏览器到底是哪一款浏览器?是浏览器的哪个版本?然后怎样给用户一个友好的提示?
JavaScript 标准语法中提供了一个对象模型:浏览器对象模型/ BOM ,可以用来操作和浏览器软件相关的各种信息

1、认识BOM

BOM : Browser(浏览器) Object(对象) Model(模型) ,描述了 JavaScript 代码中访问和操作浏览器的各种信息的一系列特殊对象,包含了 浏览器窗口对象、地址信息对象、历史访问对象、版本信息对象、网页文档对象

  • 窗口对象:可以操作浏览器弹窗、获取/设置浏览器尺寸、获取/设置浏览器位置等等
  • 地址对象:可以操作浏览器访问 url 地址,实现根据地址切换不同页面
  • 历史对象:可以操作浏览器访问历史记录
  • 版本对象:可以获取浏览器和当前运行浏览器的操作系统信息
  • 文档对象: BOM 对象,描述了当前浏览器打开的网页文档
    BOM

2、常见操作对象

常见 BOM 对象:

  • 窗口对象: window alert() / confirm() / prompt() / 其他bom对象…
  • 地址对象: location || window.location   href :地址 url 信息
  • 历史对象: history back() 后退  forward()  前进go() 访问某个记录
  • 版本信息: navigator appName :浏览器内核名称appVersion :  浏览器版本信息   userAgent :浏览器相关信息,一般和版本信息相同
  • 文档对象: document  文档对象,当前浏览器打开的网页文档
  • 屏幕对象: screen 当前计算机屏幕信息

3、常见操作属性

① window 属性

  • 弹窗属性
  • alert()/confirm()… ,一般实际项目中很少使用(不同浏览器 弹窗样式差异、弹窗影响网页加载)
  • open()/close() :代码直接打开新的网页、关闭网页

示例如下:

<!DOCTYPE html>
<html lang="zh">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <script>
        // 1、window属性
        window.alert("弹窗")
        window.open("http://www.baidu.com", "_blank")
        var _open = document.getElementById("open")
        _open.onclick = function() {
            for(var i = 0; i < 10; i++ ) {
                window.open("http://www.baidu.com", "_blank")
            }
        }
        // 如:网站中一个登录的用户,点击按钮:退出并关闭窗口,通过close()实现
        var _close = document.getElementById("close")
        _close.onclick = function() {
            window.close()
        }
    </script>
</body>
</html>

② location 地址信息:
href 属性:用于控制浏览器地址栏,一般用于代码中完成网页跳转或者刷新页面
示例如下:

<!DOCTYPE html>
<html lang="zh">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>lacation地址信息</title>
</head>
<body>
    <script>
    // 2、location对象.
    // 实现页面的点击跳转,类似超链接功能,比超链接功能强大(可以在跳转页面时 编写逻辑代码实现一些功能)
    var _baidu = document.getElementById("baidu")
    _baidu.onclick = function() {
        // 跳转网页
        location.href = "http://www.baidu.com/s?wd=明日战记"
    }
    //实现当前页面刷新
    var _refresh = document.getElementById("refresh")
     _refresh.onclick = function() { 
        location.href = "#" // 一般这里写的都是当前网页网址 
    }
    </script>
</body>
</html>

③ history 历史访问记录

  • back() / forward()
  • go()
<!DOCTYPE html>
<html lang="zh">
  <head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
  </head>
  <body>
    <script>
      // history对象
      var _b = document.getElementById("b");
      var _f = document.getElementById("f");
      var _back = document.getElementById("back");

      _b.onclick = function () {
        // 访问上一条记录
        history.back();
      };

      _f.onclick = function () {
        // 访问下一条记录
        history.forward();
      };

      _back.onclick = function () {
        // 访问上一条记录
        history.go(-1);
      };
    </script>
  </body>
</html>

拓展:面试题,请描述一下 location.go(-1) 和 history.go(-1) 有什么区别?

· 两个函数都可以用于页面回到上一页, location.go() 需要插件支持
· location.go(-1) ,回到上一页并且刷新页面
· history.go(-1) ,回到上一页

④ navigator 浏览器版本:经常用于判断浏览器产品和版本是否满足网站运行条件

  • userAgent
  • appName
  • appVersion
  • 注意:一般很少自己开发软件或者版本验证,都是直接添加第三方插件

示例如下:

4.常见的操作事件

浏览器对象模型 BOM 提供了一些重要的事件操作,可以让开发人员通过代码直接控制浏览器中的操作系统,如滚动条行为等等

- onload :网页文档加载事件,当前网页中所有的标签加载完成后才会执行的事件代码

  • onresize :浏览器窗口尺寸变化事件,浏览器窗口大小发生变化时执行

  • 浏览器宽度高度: window.innerWidth/outerWidth | window.innerHeight/outerHeight

  • 网页宽度高度:

  • 通用: document.body.cilentHeight ||document.documentELement.clientHeight

  • 苹果浏览器(了解): window.paegYOffset / pageXOffset

  • onscroll :浏览器滚动条事件,浏览器网页中滚动条一旦发生位移就会触发

  • scrollTop :滚动条卷去网页的高度 / 滚动条滚动的高度

  • scrollLeft :水平滚动条卷去网页的宽度 / 水平滚动条滚动的宽度
    在这里插入图片描述
    在这里插入图片描述

案例 吸顶菜单

代码示例如下:

<!DOCTYPE html>
<html lang="zh">
  <head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
    <style>
      * {
        margin: 0;
        padding: 0;
        box-sizing: border-box;
      }
      #nav {
        width: 100%;
        height: 50px;
        background: orangered;
        color: white;
        font-size: 22px;
        text-align: center;
        line-height: 50px;
      }
      #content{
        width:100%;
        height:2000px;
        background-color: rgba(65, 158, 127, 0.57);
      }
      #content span{
        display: block;
        font-size: 300px;
        position: fixed;
        margin-left: 200px;
        margin-top: 100px;
      }
    </style>
  </head>
  <body>
    <div id="nav">页面顶部菜单</div>
    <div id="content"> <span>content</span> </div>
  

    <script>
      // 网页加载事件:代码写在body的前面,保障标签加载完成后执行代码
      window.onload = function () {
        // 获取导航条
        var _nav = document.getElementById("nav");
        // 滚动条事件
        window.onscroll = function () {
          // 获取滚动条高度
          var top =
            document.body.scrollTop || document.documentElement.scrollTop;
          console.log(top, "滚动条");
          // 判断滚动条位置,并设置菜单样式
          if (top >= 500) {
            _nav.style.position = "fixed";
            _nav.style.left = 0;
            _nav.style.top = 0;
          } else {
            _nav.style.position = "relative";
          }
        };
      };
      
    </script>
  </body>
</html>

小总结

BOM : Browser Object Model 浏览器对象模型,描述了通过 js 代码控制浏览器一些基础信息完成网页功能的操作,包含的内置对象:

  • window 窗口对象
  • location 地址对象
  • history 历史记录对象
  • navigator 版本信息对象
  • screen 屏幕对象
  • document 网页文档对象

比较重要的属性:

  • window.innerHeight / window.innerWidth : 窗口尺寸
  • window.onload / window.onresize / window.onscroll :事件操作
  • location.href :访问地址
  • history.back() / forward() / go() :访问历史记录
  • navigator.appName / appVersion / userAgent 浏览器版本信息

BOM思维导图
在这里插入图片描述

🆗 🆗 🆗           散会!!!

本文含有隐藏内容,请 开通VIP 后查看

网站公告

今日签到

点亮在社区的每一天
去签到