BOM 相关知识总结

一:介绍BOM

 1     1.什么是BOM?
 2     DOM就是一套操作HTML标签的API(接口/方法/属性)
 3     BOM就是一套操作浏览器的API(接口/方法/属性)
 4 
 5     2.BOM中常见的对象
 6     window: 代表整个浏览器窗口
 7     注意: window是BOM中的一个对象, 并且是一个顶级的对象(全局)
 8     Navigator: 代表当前浏览器的信息, 通过Navigator我们就能判断用户当前是什么浏览器
 9     Location:  代表浏览器地址栏的信息, 通过Location我们就能设置或者获取当前地址信息
10     History:   代表浏览器的历史信息, 通过History来实现刷新/上一步/下一步
11     注意点: 出于隐私考虑, 我们并不能拿到用户所有的历史记录, 只能拿到当前的历史记录
12     Screen:   代表用户的屏幕信息

二:Navigator

 1 <!DOCTYPE html>
 2 <html lang="en">
 3 <head>
 4     <meta charset="UTF-8">
 5     <title></title>
 6 </head>
 7 <body>
 8 <script>
 9     // Navigator: 代表当前浏览器的信息, 通过Navigator我们就能判断用户当前是什么浏览器
10     // console.log(window.navigator);
11     var agent = window.navigator.userAgent;
12     if(/chrome/i.test(agent)){
13         alert("当前是谷歌浏览器");
14     }else if(/firefox/i.test(agent)){
15         alert("当前是火狐浏览器");
16     }else if(/msie/i.test(agent)){
17         alert("当前是低级IE浏览器");
18     }else if("ActiveXObject" in window){
19         alert("当前是高级IE浏览器");
20     }
21 </script>
22 </body>
23 </html>

三:Loaction

 1 <!DOCTYPE html>
 2 <html lang="en">
 3 <head>
 4     <meta charset="UTF-8">
 5     <title></title>
 6 </head>
 7 <body>
 8 <button id="btn1">获取</button>
 9 <button id="btn2">设置</button>
10 <button id="btn3">刷新</button>
11 <button id="btn4">强制刷新</button>
12 <script>
13     // Location:  代表浏览器地址栏的信息, 通过Location我们就能设置或者获取当前地址信息
14     let oBtn1 = document.querySelector("#btn1");
15     let oBtn2 = document.querySelector("#btn2");
16     let oBtn3 = document.querySelector("#btn3");
17     let oBtn4 = document.querySelector("#btn4");
18     // 获取当前地址栏的地址
19     oBtn1.onclick = function(){
20         console.log(window.location.href);
21     }
22     // 设置当前地址栏的地址
23     oBtn2.onclick = function(){
24         window.location.href = "http://www.baidu.com";
25     }
26     // 重新加载界面
27     oBtn3.onclick = function(){
28         window.location.reload();
29     }
30     oBtn4.onclick = function(){
31         window.location.reload(true);
32     }
33 </script>
34 </body>
35 </html>

四:History

    History:   代表浏览器的历史信息, 通过History来实现刷新/前进/后退
    注意点: 出于隐私考虑, 我们并不能拿到用户所有的历史记录, 只能拿到当前的历史记录

    /*
    注意点:
    只有当前访问过其它的界面, 才能通过forward/go方法前进
    如果给go方法传递1, 就代表前进1个界面, 传递2就代表进行2个界面
    */

      window.history.forward();
      window.history.go(1);

     History:   代表浏览器的历史信息, 通过History来实现刷新/上一步/下一步
    
   
      /*
     注意点:
      只有当前访问过其它的界面, back/go方法后退
       如果给go方法传递-1, 就代表后退1个界面, 传递-2就代表后退2个界面
      */
  
  
        // window.history.back();
        window.history.go(-1);
 

五:获取元素宽高其它方式1

  1 <!DOCTYPE html>
  2 <html lang="en">
  3 <head>
  4     <meta charset="UTF-8">
  5     <title></title>
  6     <style>
  7         *{
  8             margin: 0;
  9             padding: 0;
 10         }
 11         div{
 12             width: 100px;
 13             height: 100px;
 14             padding: 50px;
 15             border: 50px solid #000;
 16             background: red;
 17             background-clip: content-box;
 18         }
 19     </style>
 20 </head>
 21 <body>
 22 <div id="box"></div>
 23 <script>
 24     /*
 25     1.通过getComputedStyle获取宽高
 26     1.1获取的宽高不包括 边框和内边距
 27     1.2即可以获取行内设置的宽高也可以获取CSS设置的宽高
 28     1.3只支持获取, 不支持设置
 29     1.4只支持IE9及以上浏览器
 30     */
 31     /*
 32     var oDiv = document.getElementById("box");
 33     // oDiv.style.width = "166px";
 34     // oDiv.style.height = "166px";
 35     var style = getComputedStyle(oDiv);
 36     // style.width = "166px";
 37     // style.height = "166px";
 38     console.log(style.width);
 39     console.log(style.height);
 40     */
 41 
 42     /*
 43     2.通过currentStyle属性获取宽高
 44     2.1获取的宽高不包括 边框和内边距
 45     2.2即可以获取行内设置的宽高也可以获取CSS设置的宽高
 46     2.3只支持获取, 不支持设置
 47     2.4只支持IE9以下浏览器
 48     */
 49     /*
 50     var oDiv = document.getElementById("box");
 51     // oDiv.style.width = "166px";
 52     // oDiv.style.height = "166px";
 53     var style = oDiv.currentStyle;
 54     style.width = "166px";
 55     style.height = "166px";
 56     // console.log(style);
 57     console.log(style.width);
 58     console.log(style.height);
 59     */
 60 
 61     /*
 62     3.通过style属性获取宽高
 63     3.1获取的宽高不包括 边框和内边距
 64     3.2只能获取内设置的宽高, 不能获取CSS设置的宽高
 65     3.3可以获取也可以设置
 66     3.4高级低级浏览器都支持
 67     */
 68     /*
 69     var oDiv = document.getElementById("box");
 70     oDiv.style.width = "166px";
 71     oDiv.style.height = "166px";
 72     console.log(oDiv.style.width);
 73     console.log(oDiv.style.height);
 74     */
 75 
 76     /*
 77     4.offsetWidth和offsetHeight
 78     4.1获取的宽高包含 边框 + 内边距 + 元素宽高
 79     4.2即可以获取行内设置的宽高也可以获取CSS设置的宽高
 80     4.3只支持获取, 不支持设置
 81     4.4高级低级浏览器都支持
 82     */
 83     /*
 84     var oDiv = document.getElementById("box");
 85     // oDiv.offsetWidth = "166px";
 86     // oDiv.offsetHeight = "166px";
 87     oDiv.style.width = "166px";
 88     oDiv.style.height = "166px";
 89     console.log(oDiv.offsetWidth);
 90     console.log(oDiv.offsetHeight);
 91     */
 92 
 93     /*
 94     1.getComputedStyle/currentStyle/style
 95     获取的宽高不包括 边框和内边距
 96     2.offsetWidth/offsetHeight
 97     获取的宽高包括 边框和内边距
 98 
 99     3.getComputedStyle/currentStyle/offsetXXX
100     只支持获取, 不支持设置
101     4.style
102     可以获取, 也可以设置
103 
104     5.getComputedStyle/currentStyle/offsetXXX
105     即可以获取行内,也可以获取外链和内联样式
106     6.style
107     只能获取行内样式
108     */
109 </script>
110 </body>
111 </html>

六:获取元素位置之offset属性

 1 <!DOCTYPE html>
 2 <html lang="en">
 3 <head>
 4     <meta charset="UTF-8">
 5     <title></title>
 6     <style>
 7         *{
 8             margin: 0;
 9             padding: 0;
10         }
11         .father{
12             width: 200px;
13             height: 200px;
14             margin-top: 100px;
15             margin-left: 100px;
16             background: blue;
17             overflow: hidden;
18             position: relative;
19         }
20         .son{
21             width: 100px;
22             height: 100px;
23             margin-top: 100px;
24             margin-left: 100px;
25             background: red;
26         }
27     </style>
28 </head>
29 <body>
30 <div class="father">
31     <div class="son"></div>
32 </div>
33 <script>
34     /*
35     1.offsetLeft和offsetTop作用
36     获取元素到第一个定位祖先元素之间的偏移位
37     如果没有祖先元素是定位的, 那么就是获取到body的偏移位
38     */
39     let oSDiv = document.querySelector(".son");
40     oSDiv.onclick = function () {
41         console.log(oSDiv.offsetLeft);
42         console.log(oSDiv.offsetTop);
43     }
44 
45 </script>
46 </body>
47 </html>

七:offsetParent

 1 <!DOCTYPE html>
 2 <html lang="en">
 3 <head>
 4     <meta charset="UTF-8">
 5     <title></title>
 6     <style>
 7         *{
 8             margin: 0;
 9             padding: 0;
10         }
11         .grand-father{
12             width: 300px;
13             height: 300px;
14             margin-top: 100px;
15             margin-left: 100px;
16             background: deeppink;
17             overflow: hidden;
18             position: relative;
19         }
20         .father{
21             width: 200px;
22             height: 200px;
23             margin-top: 100px;
24             margin-left: 100px;
25             background: blue;
26             overflow: hidden;
27             position: relative;
28         }
29         .son{
30             width: 100px;
31             height: 100px;
32             margin-top: 100px;
33             margin-left: 100px;
34             background: red;
35         }
36     </style>
37 </head>
38 <body>
39 <div class="grand-father">
40     <div class="father">
41         <div class="son"></div>
42     </div>
43 </div>
44 <script>
45     /*
46     1.offsetParent作用
47     获取元素的第一个定位祖先元素
48     如果没有祖先元素是定位的, 那么就是获取到的就是body
49     */
50     let oSDiv = document.querySelector(".son");
51     oSDiv.onclick = function () {
52         console.log(oSDiv.offsetParent);  
53     }
54 </script>
55 </body>
56 </html>

八:client

 1 <!DOCTYPE html>
 2 <html lang="en">
 3 <head>
 4     <meta charset="UTF-8">
 5     <title></title>
 6     <style>
 7         *{
 8             margin: 0;
 9             padding: 0;
10         }
11         div{
12             width: 100px;
13             height: 100px;
14             padding: 50px;
15             border: 50px solid #000;
16             background: red;
17             /* 除去padding中间的content */
18             background-clip: content-box; 
19         }
20     </style>
21 </head>
22 <body>
23 <div id="box"></div>
24 <script>
25     /*
26     1.offsetWidth = 宽度 + 内边距 + 边框
27      offsetHeight = 高度 + 内边距 + 边框
28     2.clientWidth = 宽度 + 内边距
29      clientHeight = 高度 + 内边距
30     */
31     let oDiv = document.querySelector("div");
32     console.log(oDiv.clientWidth); //200
33     console.log(oDiv.clientHeight); //200
34 
35     /*
36     1.offsetLeft/offsetTop: 距离第一个定位祖先元素偏移位 || body
37     2.clientLeft/clientTop: 左边框 和 顶部边框
38     */
39     console.log(oDiv.clientLeft); //50
40     console.log(oDiv.clientTop);  //50
41 
42 </script>
43 </body>
44 </html>

九:scroll

 1 <!DOCTYPE html>
 2 <html lang="en">
 3 <head>
 4     <meta charset="UTF-8">
 5     <title></title>
 6     <style>
 7         *{
 8             margin: 0;
 9             padding: 0;
10         }
11         div{
12             width: 100px;
13             height: 100px;
14             padding: 50px;
15             border: 50px solid #000;
16             background: red;
17             background-clip: content-box;
18             color: deepskyblue;
19             overflow: auto;
20         }
21     </style>
22 </head>
23 <body>
24 <div id="box">
25     我是内容<br/>
26     我是内容<br/>
27     我是内容<br/>
28     我是内容<br/>
29     我是内容<br/>
30     我是内容<br/>
31     我是内容<br/>
32     我是内容<br/>
33     我是内容<br/>
34     我是内容<br/>
35     我是内容<br/>
36     我是内容<br/>
37     我是内容<br/>
38     我是内容<br/>
39 </div>
40 <script>
41     /*
42     1.内容没有超出元素范围时
43     scrollWidth: = 元素宽度 + 内边距宽度 == clientWidth
44     scrollHeight: = 元素高度 + 内边距的高度 == clientHeight
45     */
46     let oDiv = document.querySelector("div");
47     // console.log(oDiv.scrollWidth);
48     // console.log(oDiv.scrollHeight);
49     /*
50     2.内容超出元素范围时
51     scrollWidth: = 元素宽度 + 内边距宽度 + 超出的宽度
52     scrollHeight: = 元素高度 + 内边距的高度 + 超出的高度
53     */
54 
55     /*
56     3.scrollTop / scrollLeft
57     scrollTop: 超出元素内边距顶部的距离
58     scrollLeft: 超出元素内边距左边的距离
59     */
60     // console.log(oDiv.scrollTop);
61     oDiv.onscroll = function () {
62         console.log(oDiv.scrollTop);
63     }
64 </script>
65 </body>
66 </html>

十:获取网页的宽高

 1 <!DOCTYPE html>
 2 <html lang="en">
 3 <head>
 4     <meta charset="UTF-8">
 5     <title></title>
 6 </head>
 7 <body>
 8 <script>
 9     /*
10     // 注意点: innerWidth/innerHeight只能在IE9以及IE9以上的浏览器中才能获取
11     // console.log(window.innerWidth);
12     // console.log(window.innerHeight);
13 
14     // 注意点: documentElement.clientWidth/documentElement.clientHeight
15     // 可以用于在IE9以下的浏览器的标准模式中获取
16     // 浏览器在渲染网页的时候有两种模式"标准模式"/"混杂模式/怪异模式"
17     // 默认情况下都是以标准模式来进行渲染的(CSS1Compat)
18     // 如果网页没有书写文档声明, 那么就会按照"混杂模式/怪异模式"来进行渲染的(BackCompat)
19     // documentElement  --> HTML  --> 整个网页
20     // console.log(document.documentElement);
21     // console.log(document.documentElement.clientWidth);
22     // console.log(document.documentElement.clientHeight);
23 
24     // 注意点: 在混杂模式中利用如下的方式获取可视区域的宽高
25     // console.log(document.compatMode);// CSS1Compat
26     // console.log(document.body.clientWidth);
27     // console.log(document.body.clientHeight);
28     */
29 
30     let {width, height} = getScreen();
31     alert(width);
32     alert(height);
33 
34     function getScreen() {
35         let width, height;
36         if(window.innerWidth){
37             width = window.innerWidth;
38             height = window.innerHeight;
39         }else if(document.compatMode === "BackCompat"){
40             width = document.body.clientWidth;
41             height = document.body.clientHeight;
42         }else{
43             width = document.documentElement.clientWidth;
44             height = document.documentElement.clientHeight;
45         }
46         return {
47             width: width,
48             height: height
49         }
50     }
51 </script>
52 </body>
53 </html>

 

posted @ 2020-02-01 11:31  gsq1998  阅读(249)  评论(0编辑  收藏  举报