一、BOM 概述

Browser Object Model,BOM 浏览器对象模型

提供了独立于内容,与浏览器窗口进行交互的对象 ,核心对象是 window

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

二、window 对象常见的事件

1、页面加载事件 onload

onload 事件在文档内容(包括图像、脚本文件、CSS文件等)加载完成后触发

有了该事件就可以不用把 JS 放在文档元素后了,可以写在元素上方

<script type="text/javascript">
    window.addEventListener('load', function() {     //相同的元素、相同的事件:addEventListener注册方式都有作用
        var btn = document.querySelector('button');
        btn.addEventListener('click', function() {
            alert('我弹出了');
        })
    })
</script>
<button type="button">点击</button>

2、调整窗口大小事件 onresize

resize 在窗口大小产生变化时触发

该事件常用来完成响应式布局

<script type="text/javascript">
    window.addEventListener('load', function() {
        var div = document.querySelector('div');
        window.addEventListener('resize', function() {
            if (window.innerWidth < 800) {     // 窗口宽度小于800px时,就隐藏div 
                div.style.display = 'none';    //innerWidth属性:窗口宽度
            }
        })
    })
</script>
<div id=""></div>

三、定时器

1、定时器 setTimeout()

在延时时间(第二个参数)过后,执行函数(第一个参数)

<script type="text/javascript">                     // window可以省略,直接使用setTimeout()
    var timer1 = window.setTimeout(callback, 2000); // 第二个参数是延时时间,单位是毫秒,不写该参数时写时默认为0ms
    var timer2 = window.setTimeout(callback, 4000); // 页面中可能有多个定时器,通常给定时器加标识符(名字) 
    function callback() {                       
        console.log('+ 两秒');
    }
</script>

setTimeout() 我们也称为回调函数(需要等待时间再去调用,而普通函数都是按顺序直接调用)

element.onclick = function() {} 和 element.addEventListener('click', function(){}) 里面的函数也是回调函数

2、清除定时器 clearTimeout() 

用来停止 setTimeout() 计时器

<script type="text/javascript">
    window.addEventListener('load', function() {
        var timer = window.setTimeout(function() {
            alert('太晚啦,已爆炸');
        }, 3000);
        var btn = document.querySelector('button');
        btn.addEventListener('click', function() {
            clearTimeout(timer);  //参数为要停止的定时器名称
        })
    })    
</script>
<button type="button">解除爆炸</button>

3、定时器 setInterval()

每隔延时时间(第二个参数),反复执行函数(第一个参数)

<script type="text/javascript">     // window可以省略,直接使用setTimeout()
    window.setInterval(function() { // 第二个参数是延时时间,单位是毫秒,不写该参数时写时默认为0ms
        console.log('i love u ');   // 页面中可能有多个定时器,通常给定时器加标识符(名字) 
    }, 1000);
</script>

4、清除定时器 clearInterval()

用来停止 setInterval() 计时器

<button type="button">点击停止计时器</button>
<script type="text/javascript">
    var btn = document.querySelector('button');
    var timer = window.setInterval(function() {
        console.log('好开心啊!');
    }, 1000);
    btn.addEventListener('click', function() {
        window.clearInterval(timer);
    })
</script>

四、JS 执行队列

1、JS 是单线程

(1)JS 是单线程

同一个时间只能做一件事。所有任务需要排队,前一个任务结束,才会执行后一个任务。

(2)存在的问题

如果 JS 执行时间过长,会造成页面渲染不连贯,导致页面渲染加载阻塞的感觉

2、同步和异步

H5 提出 Web Worker 标准,允许 JS 创建多个线程,于是出现了 JS 同步和异步

(1)同步:前一个任务结束,再执行后一个任务

(2)异步:多个任务同时执行

3、同步任务和异步任务

(1)同步任务

同步任务都在主线程上

(2)异步任务

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

  • 普通事件:onclick、resize 等
  • 资源加载:onload、error 等
  • 定时器:setInterval、setTimeout 等

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

4、JS 执行机制

(1)JS 执行机制

  ① 先执行主线程的同步任务(异步任务放入任务队列中)

  ② 主线程中的同步任务执行完毕,再按次序读取任务队列中的异步任务

  ③ 被读取的异步任务结束等待状态,进入主线程,开始执行

(2)事件循环 event loop

由于主线程不断地重复获得任务、执行任务、再获取任务、执行,所以这种机制被称为事件循环

五、location 对象

window 对象的 location 属性用于获取或设置窗口的 URL,并且可以解析 URL;

因为这个属性返回的是一个对象,所以 location 属性也称为 location 对象;

调用的时候可以省略 window(即 window.location 直接省略 window)

1、属性

<button type="button">获取location属性</button>
<script type="text/javascript">
    var btn = document.querySelector('button');
    btn.addEventListener('click', function() {
        //1.location.href 获取或设置整个 URL
        console.log('URL:' + window.location.href);
        //2.location.host 返回域名
        console.log('host:' + window.location.host);
        //3.location.port 返回端口号,未写返回空字符串
        console.log('port:' + window.location.port);
        //4.location.pathname 返回路径
        console.log('pathname:' + window.location.pathname);
        //5.location.search 返回参数
        console.log('search:' + window.location.search);
        //6.location.hash 返回片段(# 后面的内容),常见于链接、锚点 
        console.log('hash:' + window.location.hash);
        window.location.href = 'http://www.baidu.com';
    })
</script>

2、方法

<button type="button" class="btn1">assign</button>
<button type="button" class="btn2">replace</button>
<button type="button" class="btn3">reload</button>
<script type="text/javascript">
    var btn1 = document.querySelector('.btn1');
    var btn2 = document.querySelector('.btn2');
    var btn3 = document.querySelector('.btn3');
    btn1.addEventListener('click', function() {
        // 1.assign() 跳转页面(重定向页面)
        location.assign('http://www.baidu.com');  //记录浏览历史,可以后退
    })
    btn2.addEventListener('click', function() {
        // 2.replace() 替换当前页面
        location.replace('http://www.baidu.com'); //不记录浏览历史,不能后退
    })
    btn3.addEventListener('click', function() {  
        // 3.repload() 重新加载页面
        location.reload();   // 不传参数 就是刷新 f5
    })                       // 传入参数 true 就是强制刷新 ctrl+f5
</script>

六、navigator 对象

navigator 对象包含有关浏览器的信息;

最常用的属性是 userAgent;

下面前端代码可以判断用户用电脑端还是移动端打开页面,并实现跳转:

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title></title>
        <script>
            if ((navigator.userAgent.match(/(phone|pad|pod|iPhone|iPod|ios|iPad|Android|Mobile|BlackBerry|IEMobile|MQQBrowser|JUC|Fennec|wOSBrowser|BrowserNG|WebOS|Symbian|Windows Phone)/i))) {
                window.location.href = "phone.html"; //如果是移动端,就跳转到其他界面
            }
        </script>
    </head>
    <body>
        <span>你好,你打开的是PC浏览器</span>
    </body>
</html>

七、history 对象

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

常用的方法如下

<p><a href="http://www.baidu.com">百度</a></p>
<button type="button" class="btn1">back</button>
<button type="button" class="btn2">forward</button>
<button type="button" class="btn3">go</button>
<script type="text/javascript">
    var btn1 = document.querySelector('.btn1');
    var btn2 = document.querySelector('.btn2');
    var btn3 = document.querySelector('.btn3');
    btn1.addEventListener('click', function() {
        // 1.back() 后退
        window.history.back();
    })
    btn2.addEventListener('click', function() {
        // 2.forward() 前进
        window.history.forward();
    })
    btn3.addEventListener('click', function() {
        // 3.go(参数) 前进后退
        window.history.go(1); //参数为 1 前进1个页面
    })                          //参数为-1 后退1个页面
</script>

history 对象一般在实际开发中比较少用,往往会在 OA 系统中见到

 

Posted on 2022-03-10 16:25  choco莉特  阅读(42)  评论(0编辑  收藏  举报