前端javascript的BOM对象知识精讲

简介: 前端javascript的BOM对象知识精讲

?? 欢迎大家来到景天科技苑??

?? 养成好习惯,先赞后看哦~??


BOM对象

BOM:Browser Object Model,浏览器对象模型,提供一系列与浏览器相关的信息。

浏览器对象模型(Browser Object Model (BOM))

不存在浏览器对象模型(BOM)的官方标准。

现代的浏览器已经(几乎)实现了 JavaScript 交互相同的方法和属性,因此它经常作为 BOM 的方法和属性被提到。


BOM对象:分为window对象和window子对象(screen对象,location对象,navigator对象,history对象)。

1.window对象

window对象是BOM顶层对象。

window对象是JS访问浏览器窗口的一个接口

window对象是一个全局对象,声明的所有的全局变量,全局方法函数最终都是window对象的属性或者方法。

其他window方法:

window.open() :打开一个新的浏览器窗口,接受四个参数(URL/打开方式/窗口参数/是否取代当前页面历史记录的布尔值)。

window.close() :关闭新打开的窗口(仅限open()打开的窗口)。

window.moveTo():移动当前窗口。

window.resizeTo():调整当前窗口的尺寸。

1 //bom称为浏览器对象模型(bowser object model),可以获取浏览器上所有的内容及相关操作
 2 //window对象
 3 console.log(window);//对象和window的构造函数
 4 //常用的弹窗方法及打印方法
 5 window.console.log('hello')//window 可以省略
 6 console.log('日志');//控制台 log日志 以日志的形式打印
 7 //以错误的形式打印
 8 console.error('错误');
 9 console.warn('警告');


10 //弹窗
11 window.alert('hello')
12 var isTrue=confirm('你确定要删除吗?')//交互框 true确认 false取消 返回
13 console.log(isTrue);
14 var str=prompt('请输入你的手机号')//输入框 返回的是string类型
15 //打开 关闭
16 //第一个参数是url地址,第二个是参数为title标题 target是设置打开方式,第三个参数为设置参数的(窗口的高度 宽度等)
17 window.open('http://www.baidu.com','_blank','width=300,height=100,top=0,left=0')    
18 // 移动窗口位置
19 window.moveBy(100,100) //X+100 Y+100 移动位置
20 window.moveTo(200,200)  //从当前位置移动
21 //改变对应窗口大小
22 window.resizeBy(200,200)//改变大小
23 window.resizeTo(200,200) //从当前修改大小
24 //print打印方法
25 window.print()
26 window.focus()//聚焦
27 window.blur()//失去焦点
28 //滚动条栏位置改变
29         window.scrollBy(100,100)//在原本位置上面移动
30         window.scrollTo(0,550)//到达位置 回到顶部
/*
         ### BOM
         js BOM对象  : 针对于浏览器的控制   browser object model 
         js 中最大的对象 window 整个浏览器窗口出现的所有内容行为都是window对象中的成员;
 */

查看window里面的成员        
console.log(window)

// 1.弹出警告框
    // window.alert('你好')   //window 可以省略,没有返回值
 

alert没有返回值

// 2.确认弹窗,这个弹窗样式取决于浏览器
    // var res = window.confirm("确认弹窗")
    // console.log(res); // true / false

点确认 返回true,取消返回false

// 3.等待输入弹窗

// var res = window.prompt(“请输入您的银行密码:”)

// console.log(res);

输入数据点确认后,结果返回,返回的是string类型

        // 4.关闭浏览器窗口,直接关闭当前页面的浏览器
        // window.close();
window对象的方法都可以不加window,因为window是最顶级的


        // innerHeight innerWidth 获取浏览器窗口内部的宽和高
        console.log(`浏览器窗口内部的宽度${window.innerWidth}`)
        console.log(`浏览器窗口内部的高度${window.innerHeight}`)

获取的是如下框柱,显示出来的窗口大小

    window.open() 第一个参数是url地址,第二个是参数为title标题 target是设置打开方式,第三个参数为设置参数的(窗口的高度 宽度等)   
默认是在当前页面打开新窗口
 // window.open("http://www.baidu.com","_self"); // 在当前页面跳转
  // window.open("http://www.baidu.com","_blank","width=500,height=500");   // 在新窗口页面跳转,参数之间加逗号


// var声明的变量在全局直接声明出来的. 自动进window
        // 不在函数中, 用var声明的变量自动进window
        // var alex = "alexis not a ssb is dsb"; // 全局变量 -> 进入window中
        // (function(){
        //     // // 局部变量和python是一样的
        //     // let hahahahaha = "alex";
        //     // // 全局?
        //     // window.hahahahaha = hahahahaha;
        //     // 省略了window
        //     // hahahahaha = "呵呵"; // 向window中存放数据
        //     // var hehe = "alex";   //函数内部使用var声明的变量,在函数外也不能使用
        //     console.log(window.alex); // A ok  B 報錯
        // })();
        // var 呵呵呵 = "我的天哪"; // 全局, 进window
        //
        // console.log(window.呵呵呵);
        //

        // window中的内容进行使用的时候, 可以省略window
        // console.log(hehe); //能A  不能B

        // window -> 窗口
        // 跳转连接
        // setTimeout(function(){
        //     // 自动跳转到某一个url地址
        //     // 在js里可以调整当前url的地址
        //     window.location.href="http://www.baidu.com?t="+new Date().getTime();
        // }, 10);

2.定时器

定时器种类(两种):基于单线程的异步并发程序; 返回id号

window.setInterval(函数名,间隔时间(毫秒)) // 定时执行多次任务

window.setTimeout(函数名,间隔时间(毫秒)) // 定时执行一次任务

终止任务
window.clearInterval(id号)  // 清除定时器 setInterval
window.clearTimeout(id号)   // 清除定时器 setTimeout


var num = 1
function func(){
    console.log(`我执行了${num}`);
    num++;
}

var id1 = window.setInterval(func,1000);
var id2 = window.setTimeout(func,2000);
console.log(id1,"id1")
console.log(id2,"id2")
console.log("我执行完了....")
window.clearInterval(id1)

定时执行多次任务,设置每秒执行一次

由下 执行完了,却还在执行 可知是异步执行

setTimeOut 只执行一次,第二个参数意思是等待多久执行,单位是毫秒

时钟—年月日时分秒

关于浏览器上看到的url的时间戳,是由于浏览器对于本次访问会生成缓存到浏览器本地

而有些url,本身开发者不希望下次请求时看到的是浏览器缓存,比如实时查看订单的url,用户需要每次拿到最新数据

前端工程师,就在每次请求的url时加个时间戳。这样每次请求的url都是新的。不会由于url一致看到原来的缓存。而是新的请求,能拿到最新数据

web页面时钟展示源码:

<!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>时钟</title>
    <style>
        #clock
        {
            width:500px;
            height:50px;
            border:solid 1px red;
            border-radius: 25px;
            text-align: center;
            line-height: 50px;
            background-color:bisque;
            color:red;
            position:absolute;
            left: 30%;
            top: 30%;
        }
    </style>
</head>
<body>
    <div id = "clock"></div>
    <script>

       // 获取文档节点对象,通过class获取的是设为相同class的元素的数组,id获取的是单个元素,因为id不能重复
       var obj = document.getElementById("clock");
        // console.log(obj)  //打印的是上面id为 clock的 div
        function myclock(){
            var d = new Date()
            // console.log(d)
            // 获取年份
            var year = d.getFullYear()
            // 获取月份,月份范围 0 ~ 11   0代表1月份
            var month = d.getMonth()
            // 获取天数
            var day = d.getDate()
            // 获取小时
            var hour = d.getHours()
            // 获取分钟
            var minute = d.getMinutes()
            // 获取秒数
            var sec = d.getSeconds()
            strvar = `现在时间是:${year}-${month+1}-${day} ${hour}:${minute}:${sec}`
            // 将字符串插入obj节点对象
            obj.innerHTML=strvar

            // 清除定时器的效果
        //     if(minute == 51){
        //         clearInterval(id);
        //     }

        }


        var id = window.setInterval(myclock,1000)

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

// 重点.时间戳

       //http://www.baidu.com/s?t=1651231231
       // 在编程的世界里. 可以用一个数字来描述时间点
       // 从1970-01-01 00:00:00开始. 每过1秒.计数1000
       let d1 = new Date();
       console.log(d1.getTime()); // getTime是获取时间戳
       // 前端时间戳的单位是毫秒
       // 在python中时间戳单位是秒

       //
       // let d2 = new Date; // 这里也是创建时间对象
       // console.log(d2.getTime());
       //
       // let arr = new Array;
       // console.log(arr);

# # python: 1654001118778.3303
# # 前端   : 1654000975731
# print(time.time())
#
# # 需要你模拟出前端的 时间戳
# # 这里拿时间戳 -> 对应前端的getTime()
# t = int(time.time() * 1000)

3.screen对象

包含显示设备的信息

screen.height、screen.width:返回设备的分辨率。

screen.availWidth、screen.availHeight:返回屏幕可用宽高,值为屏幕的实际大小减去操作系统某些功能占据的空间,如系统任务栏。

4.location对象

保存当前文档信息,将URL解析为独立片段

location.href 返回当前页面完整的URL ,修改这个属性,即跳转新页面

location.hash 返回URL中的hash(#号后跟零或多个字符)

location.host 返回服务器名称和端口号

location.port 返回服务器端口号

location.pathname 返回URL中的目录和文件名

location.hostname 返回不带端口号的服务器名称

location.protocol 返回页面使用的协议(http://或https://)

location.search 返回URL的查询字符串,字符串以问号开头

//location
        console.log(location.hash); //哈希 #后面带的值和search不能同时使用
        console.log(location.host); //主机 域名 ip地址+端口号
        console.log(location.hostname);//主机名 ip地址
        console.log(location.protocol);//协议 用于通信 (基于tcp/ip)http(明文传输)https(安全,加密)
        console.log(location.port);//端口号 1--65525 (1-100的端口号被电脑占用)http默认的端口号80 https默认端口443
        console.log(location.href);//链接的地址,也可以设置
        console.log(location.search);//?后面带的值 一般是get请求传输数据的时候
        console.log(location.origin);//跨域
        console.log(location.pathname);//路径名 获取的除了协议和ip地址
        //使用href来跳转页面  通过更改路径地址来实现跳转
        //location.href='http://www.baidu.com'
        //相关方法
        location.assign('http://www.4399.com')//跳转页面 保存历史记录
        //替换
        location.replace('http://www.weibo.com')//直接替换
        //重新加载页面
        function fn(){
            location.reload(true)//参数是boolean类型的值 true(从服务器加载) false(从缓存中加载)
        }

        // window -> 窗口
        // 跳转连接
        // setTimeout(function(){
        //     // 自动跳转到某一个url地址
        //     // 在js里可以调整当前url的地址
        //     window.location.href="http://www.baidu.com?t="+new Date().getTime();
        // }, 10);

5.navigator对象

提供一系列属性用于检测浏览器

window.navigator.userAgent :通过userAgent可以判断用户浏览器的类型

window.navigator.platform:通过platform可以判断浏览器所在的系统平台类型

window.navigator.online:判断是否联网

appCodeName 获取浏览器的内部代码名。

appMinorVersion 获取浏览器的辅版本号,常用于浏览器的补丁货服务包。

appName 获取浏览器的名称。

appVersion 获取浏览器的平台和版本信息。

language 获取当前浏览器的语言,例如,可能的一个结果是“zh-CN”。

cookieEnabled 获取浏览器中是否启用 cookie 的布尔值。

cpuClass 获取计算机系统的 CPU 型号,例如,Inter通常得到的结果是x86。

onLine 获取浏览器是否处于在线模式,结果是布尔值。

platform 获取运行浏览器的操作系统平台。

systemLanguage 获取 OS 使用的默认语言。

userAgent 获取由客户机发送服务器的 user-agent 头部的值。

userLanguage 获取 OS 的自然语言设置。

mimeTypes 获取浏览器支持的所有的MIME类型的数组。

plugins 获取安装在浏览器上的所有插件的数组。

product 获取浏览器的产品名,例如,可能的结果是Gecko。


productSub 获取浏览器产品的更多信息,例如,可能的结果是20030107。

vendor 获取浏览器的厂商名称,例如,可能的结果是Google Inc.。

vendorSub 获取浏览器的厂商更多信息。

查看navigator有哪些属性

 console.log(navigator);
console.log(navigator.platform)  // 判断是pc端还是移动端
console.log(navigator.userAgent) // 通过userAgent可以判断用户浏览器的类型,在爬虫程序中,可以伪造成浏览器进行数据爬取,绕开服务端的反爬机制;

6.history 对象

history.back():与在浏览器点击后退按钮相同

history.forward():与在浏览器中点击按钮向前相同

history.go(参数):前进后退功能,参数如果是1前进一个页面,如果是-1后退一个页面,如果是N则前进或后退N个页面

history.length(): 保存历史记录的数量

//length 历史页面个数,只能记录本页面中跳转的次数,其他页面只有在跳转到本页面后才记录
        console.log(history.length);//要记
        //scrollRestoration 滚动恢复属性 auto:自动 manual:手动操作 (keep-alive 缓存)
        console.log(history.scrollRestoration);
        //state 状态值 null
        console.log(history.state); //要记
        function fn(){
            history.forward()//前进
        }
        function fn1(){
            history.back()//后退
        }
        function fn2(){
            history.go(1)//去任意页面,0就是自己,小于0,后退,大于0前进
        }
        function fn3(){
            //添加state的值 数据 "" 地址 
            history.pushState('hello','','./index.html')
            //会改变地址,但是不会刷新,会推一个页面到历史区,价值更高
        }
        function fn4(){
            history.replaceState('world','','dizhi')//会改变地址,但是不会刷新,在历史区直接修改当前这个页面
        }
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <button onclick="func1()">查看历史对象</button>
    <button onclick="func2()">跳转到上一页</button>
    <button onclick="func3()">跳转到下一页</button>
    <button onclick="func4()">当前页面刷新</button>
    <script>
        function func1(){
            console.log(history);
        }

history.length记录当前页面跳转的页面个数

function func2(){
    history.go(-1);
}


执行这个函数相当于点击了浏览器的上一页

function func3(){
    // history.go(1);
    history.go(2);
}

function func4(){
    history.go(0);   //刷新当前页
}
onload, 当页面加载完html的时候.自动执行   防止页面还没加载完,就执行js代码,获取不到数据
        // // xxxx.onxxx = function(){} 这种逻辑也能绑定事件
        // window.onload = function(){
        //     // 页面中的内容还没有被加载好. 你就去选择页面上的东西. 此时拿到不到结果
        //     let btn = window.document.querySelector("#btn");
        //     // // console.log(btn);
        //     // // 有的时候. 爬虫的时候. script会放在上面或者放在下面
        //     // btn.onclick = function(){
        //     //     console.log("你点我干嘛!!!!!!");
        //     // }
        //
        //     // 最正宗的添加事件绑定的方案
        //     btn.addEventListener('click', function(){
        //         console.log("哈哈哈哈啊哈哈哈");
        //     })
        // }
        
window.onload = function(){
            let btn = document.querySelector("#btn")
            btn.onclick = function(){
                // 先拿到那个input. 输出东西
                let input = document.querySelector("#uname");
                input.value = "胡辣汤";
                // html -> 触发 js事件  ->  修改和处理html结构
                // 以后见到的页面异步加载数据
            }
        }


相关文章
|
1天前
|
JavaScript 前端开发
javascript操作BOM的方法
javascript操作BOM的方法
16 0
|
1天前
|
JavaScript 前端开发
js用Date对象处理时间
以上就是JavaScript中Date对象处理时间的一些基本方法。
5 0
|
1天前
|
存储 JavaScript 前端开发
使用Vue.js构建交互式前端的技术探索
【5月更文挑战第12天】Vue.js是渐进式前端框架,以其简洁和强大的特性深受开发者喜爱。它聚焦视图层,采用MVVM模式实现数据与视图的双向绑定,简化开发。核心特性包括响应式数据绑定、组件化、模板系统和虚拟DOM。通过创建Vue实例、编写模板及定义方法,可以构建交互式前端,如计数器应用。Vue.js让复杂、交互式的前端开发变得更加高效和易维护。
|
1天前
|
JavaScript 前端开发
在JavaScript中,函数原型(Function Prototype)是一个特殊的对象
【5月更文挑战第11天】JavaScript中的函数原型是一个特殊对象,它为所有函数实例提供共享的方法和属性。每个函数在创建时都有一个`prototype`属性,指向原型对象。利用原型,我们可以向所有实例添加方法和属性,实现继承。例如,我们定义一个`Person`函数,向其原型添加`greet`方法,然后创建实例`john`和`jane`,它们都能调用这个方法。尽管可以直接在原型上添加方法,但推荐在构造函数内部定义以封装数据和逻辑。
16 2
|
1天前
|
JavaScript 前端开发
JavaScript 提供了多种方法来操作 DOM(文档对象模型)
【5月更文挑战第11天】JavaScript 用于DOM操作的方法包括获取元素(getElementById, getElementsByClassName等)、修改内容(innerHTML, innerText, textContent)、改变属性、添加/删除元素(appendChild, removeChild)和调整样式。此外,addEventListener用于监听事件。注意要考虑兼容性和性能当使用这些技术。
7 2
|
1天前
|
JavaScript 前端开发
深入了解前端框架Vue.js的响应式原理
本文将深入探讨Vue.js前端框架的核心特性之一——响应式原理。通过分析Vue.js中的数据绑定、依赖追踪和虚拟DOM等机制,读者将对Vue.js的响应式系统有更深入的理解,从而能够更好地利用Vue.js构建灵活、高效的前端应用。
|
1天前
|
存储 JavaScript 前端开发
JavaScript对象方法详解
JavaScript对象方法详解
16 1
|
1天前
|
JavaScript
js多维数组去重并使具有相同属性的对象数量相加
js多维数组去重并使具有相同属性的对象数量相加
11 1
|
JavaScript
js基础笔记学习247event对象3
js基础笔记学习247event对象3
47 0
js基础笔记学习247event对象3
|
JavaScript
js基础笔记学习309筛选jquery对象1
js基础笔记学习309筛选jquery对象1
42 0
js基础笔记学习309筛选jquery对象1
http://www.vxiaotou.com