JavaScript知识点整理(十五)- BOM

目录

一、BOM概述

1.1 什么是BOM

1.2 BOM的构成

二、window对象的常见事件

2.1 窗口加载事件

2.2 调整窗口大小事件 

三、定时器

3.1 两种定时器

3.2 setTimeout()定时器

3.2.1 案例练习 - 定时器

3.3 停止setTimeout()定时器

3.4 setInterval()定时器 

3.4.1 案例练习 - 倒计时效果

3.5 停止setInterval()定时器 

3.5.1 案例练习

3.5.2 案例练习 - 防止重复发送短信按钮

3.6 this

四、JS执行队列

4.1 JS是单线程

4.2 同步和异步

4.3 JS执行机制

五、Location对象

5.1 什么是location对象

5.2 URL

5.3 location对象的属性

5.3.1 案例练习 - 5秒后自动跳转页面

5.3.2 案例练习 - 获取URL数据

5.4 location对象的方法

六、navigator对象

七、history对象


一、BOM概述

1.1 什么是BOM

BOM 即浏览器对象模型,它提供了独立于内容而与浏览器窗口进行交互的对象,其核心对象是window

BOM由一系列相关的对象构成,并且每个对象都提供了很多方法和属性

DOM:

  • 文档对象模型
  • DOM就是把 文档 当作一个 对象 来看代
  • DOM的顶级兑现格式document
  • DOM主要学习的是操作页面元素
  • DOM是W3C标准规范

BOM:

  • 浏览器对象模型
  • 把浏览器 当作一个 对象来看待
  • BOM的顶级对象是window
  • BOM学习的是浏览器窗口交互的一些对象
  • BOM是浏览器厂商在各自浏览器上定义的,兼容性较差

1.2 BOM的构成

window对象是浏览器的顶级对象,它具有双重角色

  1. 它是JS访问浏览器对象的一个接口
  2. 它是一个全局对象。定义在全局作用域中的变量、函数都工会变成window对象的属性和方法

注意:window下的一个特殊属性window.name

二、window对象的常见事件

2.1 窗口加载事件

window.onload = function(){}

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

window.onload 是窗口加载事件,当文档内容完全加载完成会触发该事件(包括图像、脚本文件、CSS等),就调用的处理函数

注意:

  1. 有了window.onload 就可以把JS代码写道页面元素的上方,因为onload是等页面内容全部加载完毕,再去执行处理函数
  2. window.onload传统注册事件方式只能写一次秒如果有多个,会以最后一个window.onload为准
  3. 如果使用addEventListener则没有限制 

document.addEventListener('DOMContentLoaded', function(){})

 DOMContentLoaded事件触发时,仅当DOM加载完成,不包括样式表、图片等等。IE9以上才支持

如果页面图片很多的话,从用户访问到onload触发可能需要较长的时间,交互效果就不能实现,必然影响用户体验,此时DOMContentLoaded事件比较合适

2.2 调整窗口大小事件 

window.onresize = function(){}

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

 window.onresize 是调整窗口大小加载事件,当触发时就调用的处理函数

注意:

  1. 只要窗口大小发生变化,就会触发这个事件
  2. 可利用这个事件完成响应式布局。window.innerWidth当前屏幕的宽度

三、定时器

3.1 两种定时器

  • setTimeout()
  • setInterval()

3.2 setTimeout()定时器

windo.setTimeout(调用函数,[延迟的毫秒数]);

setTimeout()方法用于设置一个定时器,该定时器到期后执行调用函数 

setTimeout()这个函数我们也称为回调函数 callback

注意:

  1. window可以省略
  2.  这个调用函数可以直接写 函数、写函数名 或者 采取字符串‘函数名()’ 三种形式
  3. 延迟的毫秒数省略默认是0,如果写,必须是毫秒

3.2.1 案例练习 - 定时器

5秒后自动关闭图片广告

核心思路:

  1. 5秒之后,把广告隐藏
  2. 用定时器Timeout
    <img src="img/mao1.png" alt="" class="ad">
    <script>
        var ad = document.querySelector('.ad');
        setTimeout(function(){
            ad.style.display = 'none';
        }, 5000);
    </script>

3.3 停止setTimeout()定时器

window.clearTimeout(timeoutID)

3.4 setInterval()定时器 

window.setInterval(回调函数,[间隔毫秒数]);

setInterval() 方法可以重复调用一个函数,每隔这个时间,就去调用一次回调函数

注意:

  1. window可以省略
  2.  这个调用函数可以直接写 函数、写函数名 或者 采取字符串‘函数名()’ 三种形式
  3. 延迟的毫秒数省略默认是0,如果写,必须是毫秒,表示每隔多少毫秒就调用这个函数

3.4.1 案例练习 - 倒计时效果

案例分析:

  1. 倒计时是不断变化的,需要用定时器来自动比那花(setInterval)
        div {
            margin: 200px;
        }
        
        span {
            display: inline-block;
            width: 60px;
            height: 60px;
            background-color: #333;
            font-size: 20px;
            color: #fff;
            text-align: center;
            line-height: 60px;
        }
    <div>
        <span class="day"></span>
        <span class="hour"></span>
        <span class="minute"></span>
        <span class="second"></span>
    </div>
    <script>
        var day = document.querySelector('.day');
        var hour = document.querySelector('.hour');
        var minute = document.querySelector('.minute');
        var second = document.querySelector('.second');
        var inputTime = +new Date('2022-4-1 18:00:00');
        countDown(); // 先调用一次倒计时函数,防止第一次刷新页面有空白 
        // 每隔1s调用定时器
        setInterval(countDown,1000);
        function countDown() {
            var nowTime = +new Date();
            var times = (inputTime - nowTime) / 1000;
            var d = parseInt(times / 60 / 60 / 24);
            d = d < 10 ? '0' + d : d;
            day.innerHTML = d + '天';
            var h = parseInt(times / 60 / 60 % 24);
            h = h < 10 ? '0' + h : h;
            hour.innerHTML = h + '时';
            var m = parseInt(times / 60 % 60);
            m = m < 10 ? '0' + m : m;
            minute.innerHTML = m + '分';
            var s = parseInt(times % 60);
            s = s < 10 ? '0' + s : s;
            second.innerHTML = s + '秒';
        }
    </script>

3.5 停止setInterval()定时器 

window.clearInterval(intervalID)

3.5.1 案例练习

点击开始定时器按钮,日志开始打印内容,点击停止,则日志停止打印内容

    <button class="start">开始定时器</button>
    <button class="stop">停止定时器</button>
    <script>
        var start = document.querySelector('.start');
        var stop = document.querySelector('.stop');
        var timer = null;
        start.addEventListener('click',function(){
            timer = setInterval(function(){
                console.log('开始定时器');
            },1000);
        });
        stop.addEventListener('click',function(){
            clearInterval(timer);
        });
    </script>

3.5.2 案例练习 - 防止重复发送短信按钮

点击按钮后,该按钮60s之内不能再次点击,防止重复发送短信

案例分析:

  1. 按钮点击之后,会禁用disable为true
  2. 同时按钮里面的内容会变化,注意button里面的内容通过innerHTML实现修改
  3. 里面的秒数是有变化的,需要用到定时器
  4. 定义一个变量,在定时器里面,不断递减
  5. 如果变量为0,停止定时器,并复原按钮初始状态
    手机号码:<input type="number"> <button>发送</button>
    <script>
        var btn = document.querySelector('button');
        var time = 5;
        btn.addEventListener('click',function(){
            btn.disabled = true;
            var timeEnd = setInterval(function(){
                if(time == 0){
                    clearInterval(timeEnd);
                    btn.disabled = false
                    btn.innerHTML = '发送'
                    time = 5;
                } else {
                btn.innerHTML = '还剩下' + time + '秒';
                time--;
                }
            }, 1000);
        });
    </script>

3.6 this

this的指向在函数定义的时候确定不了的,只有函数执行时才能确定this到底指向谁,一般情况下this的最终指向的是调用它的对象

  1. 全局作用域或者普通函数中this指向全局对象window(注意定时器里面的this指向window)
  2. 方法调用中谁调用this指向谁
  3. 构造函数中this指向构造函数的实例

四、JS执行队列

4.1 JS是单线程

JavaScript语言的一大特点就是单线程,同一个时间就只能最一件事

单线程意味着,所有任务需要排队,前一个任务结束了,才会执行后一个任务

4.2 同步和异步

同步:前一个任务结束后再执行后一个任务,程序的执行顺序与任务的排列顺序是一致的,同步的

异步:在做这件事的同时,还可以去处理其他事情

本质区别:这条流水线上各个流程的执行顺序不同

同步任务:同步任务都在主线程上执行,形参一个执行栈

异步任务:JS的异步是通过回调函数实现的,异步任务有三种类型:

  1. 普通事件,如click、resize等
  2. 资源加载,如load、error等
  3. 定时器,包括setInterval、setTimeout等

异步任务相关回调函数添加到任务队列中(任务队列也称为消息队列)

4.3 JS执行机制

  1. 先执行执行栈中的同步任务
  2. 异步任务(回调函数)放入任务队列中
  3. 一旦执行栈中的所有同步任务执行完毕,系统就会按次序读取任务队列中的异步任务,于是被读取的异步任务结束等待状态,进入栈,开始执行
  4. 由于主线程不断重复获得任务、执行任务、再获取任务、再执行,这种机制被称为事件循环

五、Location对象

5.1 什么是location对象

window对象给我们提供了一个location属性用于获取或设置窗体的URL,并且可以用于解析URL。该属性返回的是一个对象。

5.2 URL

统一资源定位符是互联网上标准资源的地址。互联网上的每个文件都有一个唯一的URL,它包含的信息指出文件的位置以及浏览器怎么处理它

URL的一般语法格式

protocol://host[:port]/path/[?quert]#fragment

组成说明
protocol通信协议,常用http、ftp、maio等
host主机(域名),如www.baidu.com
port端口号 可选,省略时使用方案的默认端口,如http默认端口为80
path路径,由 零或多个‘/’ 符号隔开的字符串,一般用来表示主机上的一个目录或者文件地址
query参数,以键值对的形式,通过&符号分隔开
fragment片段,#后面内容,常见于链接 锚点

5.3 location对象的属性

location对象属性返回值
location.href获取或者设置 整个URL
location.host返回主机(域名)
location.port返回端口号,如果未写返回 空字符串
location.pathname返回路径
location.search返回参数
location.hash返回片段,#后面内容,常见于链接 锚点

重点:href 和 search

5.3.1 案例练习 - 5秒后自动跳转页面

案例分析:

  1. 利用定时器做倒计时效果
  2. 时间到了,就跳转特面,使用location.href
    <div></div>
    <script>
        var div = document.querySelector('div');
        var timer = 5;
        setInterval(function(){
            if(timer == 0){
                location.href = 'http://www.baidu.com';
            } else {
                div.innerHTML = '您将在' + timer + '秒之后跳转页面';
                timer--;
            }
        },1000);
    </script>

5.3.2 案例练习 - 获取URL数据

提取链接中的参数

案例分析:

  1. login页面中提交表单,action提交到index.html页面
  2. 第二个页面可以使用第一个页面的参数,实现了一个数据不同页面之间的传递效果
  3. 第二个页面利用URL里面的location.search参数使得可以使用第一个页面的数据
  4. 在第二个页面中,需要把或者参数提取出来
  5. 第一步去掉?利用substr
  6. 第二部 利用 = 号分割 键 和 值 split('=')

login.html

    <form action="index.html">
        用户名:<input type="text" name="uname">
        <input type="submit" value="登录">
    </form>

index.html

    <div></div>
    <script>
        var params = location.search.substr(1);
        var arr = params.split('=');
        var div = document.querySelector('div');
        div.innerHTML = arr[1]+',欢迎您!';
    </script>

5.4 location对象的方法

location对象方法返回值
location.assign()和href一样,可以跳转页面
location.replace()替换当前页面,因为不记录历史,所以也不能后退页面
location.reload()重新加载页面,相当于刷新按钮或者 f5,如果参数为true强制属性 ctrl+f5

六、navigator对象

navigator对象包含有关浏览器信息,常用信息:userAgent,该属性可以返回客户机发送服务器的user-agent头部值

可用于判断用户使用移动端还是PC端,从而跳转到相对应端口的页面

七、history对象

window对象提供了history对象,与浏览器历史记录进行交互。该对象包含用户(在浏览器窗口中)访问过的URL

history对象方法作用
back()可以后退功能
forward()前进功能
go(参数)前进后退功能。参数如果是1前进1个页面,如果是-1后退1个页面

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

JHY97

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值