BOM操作

目录

一、概念

1.什么是BOM

2.JavaScript顶级对象

二、BOM操作 三大弹窗

三、视窗窗口 宽度 高度

获取浏览器视窗窗口宽度高度

四、浏览器视窗窗口监听事件

案例

五、页面上卷的距离

获取页面上卷的高度

六、页面滚动监听事件

案例

七、浏览器历史记录

当前窗口 浏览的页面个数

返回上一个浏览的页面

返回下一个浏览的页面

设定跳转的页面

八、浏览器地址栏信息

九、页面跳转

案例

 十、html跳转页面携带参数

1. a标签

 2.form

十一、获取浏览器地址栏参数数据


一、概念

1.什么是BOM

浏览器对象模型,JavaScript程序提供的操作浏览器的函数方法

2.JavaScript顶级对象

     是JavaScript定义好的对象

DOM操作的顶级对象

        document           也就是整个html文档

        document.documentElement       html标签

        document.body                            body标签

        document.head                            head标签

        document.title                              title

BOM操作的顶级对象

        window

               JavaScript语法规定window可以省略不写

               window.alert()

               aleert()

二、BOM操作 三大弹窗

1.警告框

           window.alert('内容');

2.输入框

           window.prompt('内容');

           可以使用变量 存储输入的数据,获取的结果:一定是字符串类型

3.确认框

            window.confrim('内容');

            可以使用变量 存储 执行结果返回值

            点击 确定 返回值是 true

            点击 取消 返回值是 false

//输入框
var num = window.prompt('请输入您想要输入的数字');
//警告框
window.alert(num);
//确认框
var res = window.confirm('您确定要删除吗?');
console.log( res );

输入框:

警告框:

确认框: 

三、视窗窗口 宽度 高度

获取浏览器视窗窗口宽度高度

 包括滚动条宽度

    window.innerWidth       window.innerHeight

 不包括滚动条宽度

有文档类型声明 (实际项目中使用的函数方法,只需要重点记这一个即可)

    document.documentElement.clientWidth

    document.documentElement.clientHeight

没有文档类型声明

    document.body.clientWidth

    document.body.clientHeight

四、浏览器视窗窗口监听事件

当 视窗窗口 宽度高度改变时 触发对应的函数程序

   根据 浏览器视窗窗口宽度 设定需要执行函数程序

     window.addEventListener('resize',function(){});

案例

<!DOCTYPE html>
<html lang="en">
<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>
      body{
        height: 5000px;
      }
      div{
        width: 1000px;
        height: 100px;
        background: pink;
        margin:50px auto;
      }
    </style>
</head>
<body>

  <div></div>  

  <script>
     
     //获取div标签对象
     var oDiv = document.querySelector('div');
     
     //视窗窗口监听事件
     //当 视窗窗口 宽度高度改变时 触发函数程序
     window.addEventListener('resize',function(){
        //获取 浏览器 视窗窗口的宽度
        var width = document.documentElement.clientWidth;
  
        // 如果 视窗窗口宽度 大于 1200 div的宽度是原始宽度的100%
        if (width > 1200) {
          oDiv.style.width = '1000px';

        // 如果 视窗窗口宽度 在 1200 至 960 div的宽度是原始宽度的 80%
        }else if(width <= 1200 && width > 960) {
          oDiv.style.width = '800px';

        // 如果 视窗窗口宽度 在 960 至 768 div的宽度是原始宽度的 60%
        }else if (width <= 960 && width > 768) {
          oDiv.style.width = '600px';

        // 如果 视窗窗口宽度 小于 768 div的宽度是原始宽度的 40%
        }else if (width <= 768) {
          oDiv.style.width = '400px';
        }

        });
  </script>  

</body>
</html>

有兴趣的小伙伴可以自己去看一下执行结果,类似于响应式布局

五、页面上卷的距离

获取页面上卷的高度

有文档类型声明

    document.documentElement.scrollTop

    document.documentElement.scrollLeft

没有文档类型声明

     document.body.scrollTop

     document.body.scrollLeft

六、页面滚动监听事件

页面滚动触发的函数程序

  window.addEventListener('scroll',function(){})

一般 页面滚动监听事件 每次触发都不会只触发一次

一般 都是 页面滚动一次 触发多次函数程序

案例

<!DOCTYPE html>
<html lang="en">
<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>
      body{
        height: 5000px;
      }
      div{
        width: 100%;
        height: 0px;
        font-size: 80px;
        line-height: 150px;
        background: pink;
        color: #fff;
        text-align: center;
        position:fixed;
        top:0;
        left:0;
        overflow: hidden;
        transition:all 1s;   
      }
    </style>
</head>
<body>

  <div>吸顶效果</div>  

  <script>
     
    //获取div标签对象
    var oDiv = document.querySelector('div');

    //页面滚动监听事件
    window.addEventListener('scroll',function(){

    // 设定 当 页面上卷高度 大于 500 时 让 吸顶div显示
    if (document.documentElement.scrollTop > 500) {
      oDiv.style.height = '150px';

    // 小于等于 500 是 让 吸顶div隐藏
    }else{
      oDiv.style.height = '0px';
    }
    });

     
  </script>  

</body>
</html>

有兴趣的小伙伴可以自己去看一下执行结果

七、浏览器历史记录

当前窗口 浏览的页面个数

    window.history.length

返回上一个浏览的页面

    window.history.back()

    相当于 浏览器的向右箭头

返回下一个浏览的页面

    window.history.forward()

    相当于 浏览器的向右箭头

设定跳转的页面

   window.history.go(+ / - 数值)

    正数 是 向前跳转的页面个数

    负数 是 向后跳转的页面个数

八、浏览器地址栏信息

1. host: "127.0.0.1"

      window.location.host

               服务器地址/域名

2. hostname: "127.0.0.1"

        window.location.hostname

                服务器名称

3. href: "http://127.0.0.1/demo.html"

        window.location.href

                浏览器地址栏url地址

4. origin: "http://127.0.0.1"

         window.location.origin

                 服务器源文件地址路径

5. pathname: "/demo.html"

         window.location.pathname

                 当前文件的路径地址

6. port: ""

         window.location.port

                  服务器端口号

7. protocol: "http:"

         window.location.protocol

                  服务器协议版本

8. reload: ƒ reload()

          window.location.reload()

                  刷新当前页面

9. replace: ƒ replace()

          window.location.replace()

                  替换当前url地址

10. search: "

          window.location.search

                  浏览器地址栏携带参数数据

11. window.open()

                新窗口打开url地址

12.  window.close()

                关闭当前窗口

目前我们先了解掌握以下的几个

window.location.href

       可以获取 当前浏览器地址栏的URL地址

       也可以设定 当前浏览器地址栏的URL地址

       获取

              var  变量  = window.location.href;

       设定

             window.location.href = 'url地址';

              行效果 就是 设定 页面跳转的url地址,本窗口打开当前url地址

window.location.seaech

         获取浏览器地址栏中 携带的数据参数

         跳转当前页面 同时以get方式携带的数据参数

window.location.reload()

         刷新当前页面

window.open()

         新窗口打开url地址

window.close()

         关闭当前窗口

九、页面跳转

标签添加事件 触发事件 执行对应的函数程序

window.location.href = 'url地址'

    跳转 设定的 url地址路径,当前窗口打开

window.open ('url地址路径');

   跳转 设定的 url地址路径,新窗口打开

获取 当前浏览器 地址url路径

   var 变量 = window.location.href;

         获取结果 中文 特殊符号 都是以%十六进制数值形式显示

   window.decodeURIComponent()

         将 %十六进制 还原为 对应的字符串

   window.encodeURIComponent()

         将 字符串 转化为 %十六进制

案例

<!DOCTYPE html>
<html lang="en">
<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>
  <button>百度1</button>
  <button>百度2</button>

<script>
  
  //获取 当前url地址栏数据信息
  // url地址栏 中 中文 特殊符号 都已 %两位十六进制数值形式显示
  var url  =window.location.href;
  console.log(url);

  //获取标签对象
  var oBtn1 = document.querySelectorAll('button')[0];
  var oBtn2 = document.querySelectorAll('button')[1]; 

  //添加点击事件
  //当前窗口打开 设定的跳转url路径
  oBtn1.addEventListener('click',function(){
      window.location.href = 'https://www.baidu.com';
  });
  
  //新窗口打开 设定的跳转url路径
  oBtn2.addEventListener('click',function(){
      window.open('https://www.baidu.com');
  });

</script>
</body>
</html>

 十、html跳转页面携带参数

html跳转页面 并且携带参数的方法

1. a标签

      跳转页面

              设定 href的属性值

      携带参数

              在href设定的url地址后 携带参数数据

              1. 以 ? 间隔 url地址 和 携带参数数据

              2. 以 键值对形式 携带参数数据  键名 = 键值

              3. 多个键名键值之间以 & 符号 间隔

a   只能使用get方式传参

     语法    <a href="url地址?键名=键值&键名=键值&键名=键值...">内容</a>       

  这个是我的文件夹

//要跳转的页面地址  并且携带参数
<a href="./00csdn-1.html?name=张三&age=18&sex=男">跳转</a>

   运行后

点了跳转后

 2.form

     跳转页面

               设定 action属性的属性值

     设定携带参数方式

               action  属性 设定 跳转的url地址路径

               method  属性 设定 传参方式 get / post

     标签参数

               input 等标签 需要 设定 name属性 以及必要的value属性

                     name属性 是 前端html标签 存储 标签数据的容器

                     value属性 是 标签的数据数值

以下代码我是写在 00csdn.html 文件中的,

<!DOCTYPE html>
<html lang="en">
<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>
  <form action="./00csdn-1.html" method="get">
    账户:<input type="text" name="username"><br>
    密码:<input type="password" name="userpass"><br>
    性别:男<input type="radio" name="sex" value="男">
         女<input type="radio" name="sex" value="女">
         保密<input type="radio" name="sex" value="保密"><br>
    爱好:王者荣耀<input type="checkbox" name="hobby" value="王者荣耀">
         和平精英<input type="checkbox" name="hobby" value="和平精英">
         看电影 <input type="checkbox" name="hobby" value="看电影">
         学习编程<input type="checkbox" name="hobby" value="学习编程"><br>
    <button>跳转</button>
  </form>

</body>

</html>

   运行后,输入数据 

点击跳转后,就跳到 00csdn-1.html页面

十一、获取浏览器地址栏参数数据

获取浏览器地址栏中携带的参数数据

    window.location.search

例:

           name=张三&age=18&sex=男

           {name:'张三' , age:18 , sex:'男'}

现在我们来获取 00csdn-1.html 浏览器地址栏中携带的参数数据,以下代码都要写在  00csdn-1.html文件中

当 00csdn.html 文件代码执行,并跳转后,会携带参数跳转,那我们要做的就是获取它的参数

<script>
     console.log(window.location.search);
</script>

执行结果:

获取的结果 带有 间隔符号 ?

1.可以通过字符串截取 截取不包含?问号的内容

2.获取结果是一个字符串 需要转化为 对象类型

怎么做呢?我们一步步的来做

<!DOCTYPE html>
<html lang="en">

<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>
        //console.log(window.location.search);

        //创建一个对象,存储最终结果
        var obj = {};
        //1 获取浏览器地址栏中携带的数据参数,需要截取起始的?问号
        var str = window.location.search.substr(1);
        console.log(str);

        //2 根据间隔符号 & 将 字符串分割为数组
        var arr = str.split('&');
        console.log(arr);

        //3 循环遍历数组
        arr.forEach(function (index) {
            //index 存储的是数组的数值数据,输出index就是字符串"键名=键值"
            //按照 = 等号为间隔 将 键名=键值 分割为数组
            var arr1 = index.split('=');
            console.log(arr1);


            //4 给对象 新增 属性和属性值
            // arr1[0] 是 键名
            // arr1[1] 是 键值 有可能是 %十六进制S
            //前端传参 有可能是 多个不同的键值 使用相同的键名,应该使用 数组的方式 存储

            //就比如,爱好是相同的键名,但是键值有四个
            //那么我们就应该使用 数组的方式 存储

            //调用属性 判断 有没有 这个属性 
            //如果 调用 结果是 undefined 证明 这个键名不存在 
            if (obj[arr1[0]] === undefined) {

                //证明没有这个属性 新增 对象.属性=属性值;
                obj[arr1[0]] = window.decodeURIComponent(arr1[1]);

                // 如果 调用 结果不是 undefined 证明 这个键名已经存在
                //也就是 多个不同数据使用 相同键名存储数据 需要使用数组的形式存储 
            } else {

                //如果 调用的数据 是 字符串类型 证明 已经存储了一个数据
                //那么就需要转为数组存储
                if (typeof (obj[arr1[0]]) === 'string') {
                    // 也就是当前属性存储的是 字符串类型 
                    // 给 当前属性存储数据结构 定义为数组
                    //数组的第一个单元是 属性存储的原始数据 也就是 obj[ arr2[0] ]
                    //数组的第二个单元是 当前的属性值 也就是 arr2[1]
                    obj[arr1[0]] = [obj[arr1[0]], window.decodeURIComponent(arr1[1])];

                    //如果调用的数据 不是 字符串类型 证明 已经用数组存储
                } else {
                    // 也就是当前属性存储的是 数组
                    // 向数组中新增当前数据
                    obj[ arr1[0] ].push(  window.decodeURIComponent( arr1[1] ) );
                }
            }

        });
        console.log(obj);


    </script>
</body>

</html>

在 00csdn.html执行后

点击跳转后,跳到 00csdn-1.html,按F12,就可以看到00csdn-1.html代码执行结果,可以看到获取的浏览器地址栏中携带的参数数据


版权声明:本文为weixin_58448088原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。