JS~BOM

目录

 一、BOM概述

1.简介

2.BOM的构成

二、window对象的常见事件

1.窗口加载事件

2.调整窗口大小事件

三、定时器

1.setTimeout()定时器

一、语法规范

二、关于回调函数

三、停止setTimeout()定时器

2.setInterval ()  定时器

一、语法规范

二、倒计时案例

 三、停止setInteral()定时器

 四、发送短信案例

 3.this

四、JS执行队列

1.JS语言特点

2.单线程

3.同步和异步

一、同步

二、异步

4.JS执行机制

五、location对象

1.location对象

2.url

 3.location对象的属性

 一、实现5秒自动跳页面的案例

二、实现数据在不同页面中传递的案例

 4.location对象的方法

六、navigator对象

七、history对象


 

 一、BOM概述

1.简介

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

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

BOM缺乏标准,JavaScript语法的标准化阻止是ECMA,DOM的标准化组织是w3c,BOM最初是Netscape浏览器标准的一部分。

2.BOM的构成

BOM比DOM更大,它包含DOM 。

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

1.它是JS访问浏览器的一个接口。

2.它是一个全局对象。定义在全局作用域中的变量、函数都会变成window对象的属性和方法。

3,在调用的时候可以省略window,前面学习的对话框都属于window对象的方法,如aler()、prompt()等。

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

二、window对象的常见事件

1.窗口加载事件

    window.onload = function () {}
    或者
    window.addEventListener("load",function () {});

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

注意:

1.有了window.onload就可以把JS代码写道页面元素的上方,因为onload是等页面内容全部加载完毕,再去执行的处理函数。

2.window.onload传统注册事件方式只能写一次,如果有多个,会以最后一个window.onload为准。

3.如果使用addEventListener则没有限制

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

DOMContentLoaded事件触发时,仅当DOM加载完成,不包括样式表,图片,flash等。

ie9以上支持

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

总结:

load等页面内容加载完毕,包含页面的DOM元素 图片 flash css等

DOMContentLoaded 是DOM加载完毕,不包含图片 flash css 等就可以执行,加载速度比load更快

2.调整窗口大小事件

window.onresize = function ( ) { }

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

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

注意:

1.只要窗口大小发生像素变化,就会触发这个事件。

2.我们经常利用这个事件完成响应式布局。window.innerWidth当前屏幕的宽度。

三、定时器

window对象给我们提供了2个非常好的办法,定时器

1.setTimeout()定时器

一、语法规范

window.setTimeout (调用函数,延时时间)

1.这个window在调用时可以省略

2.这个延时时间单位是毫秒,但是可以省略

3.这个调用函数可以写函数,也可以写函数名

4.页面可能有多个定时器,我们经常给定时器加标识符(名字)

    <script>
        function callback () {
            alert('fuck')
        }
        var time1 = setTimeout(callback,2000);
        var time2 = setTimeout(callback,4000);
    </script>

二、关于回调函数

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

普通函数是按照代码顺序直接调用。

而这个函数需要等待时间,时间到了才去调用这个函数,因此称为回调函数。

以前学习的 element.onclick = function() {} 或者 element.addEventListener("click,fn")里面的函数也是回调函数。

三、停止setTimeout()定时器

    <script>
        var btn = document.querySelector('button');
        var time1 = setTimeout(callback,3000);
        function callback () {
            alert('fuck')
        }
        btn.addEventListener('click',function () {
            clearTimeout(time1);
        })
    </script>

2.setInterval ()  定时器

一、语法规范

window.setInterval (调用函数,【间隔的毫秒数】)

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

二、倒计时案例

分析:
1.这个倒计时是不断变化的,因此需要倒计时来自动变化(setInterval)

2.三个黑色盒子分别存放时分秒

3.三个盒子利用innerHtml放入计算的小时分钟秒数

4.第一次执行也是间隔毫秒数,因此刷新页面会有空白

5.最好采用封装函数的方式,这样可以先调用一个函数,防止页面刚访问时有空白

<body>
    <div>
        <span class="hour">1</span>
        <span class="minute">1</span>
        <span class="second">1</span>
    </div>
    <script>
        var hour = document.querySelector('.hour');       //小时盒子
        var minute = document.querySelector('.minute');   //分钟盒子
        var second = document.querySelector('.second');   //秒数盒子
        var inputTime = +new Date('2022-9-10 19:00:00'); //返回的是用户输入时间总的毫秒数
        countDown ();
        setInterval(countDown,1000);
        function countDown () {
            var nowTime = +new Date();   //返回的是当前时间总的毫秒数
            var times = (inputTime - nowTime) / 1000;   //times是剩余时间总的秒数
            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>
</body>

 三、停止setInteral()定时器

        var begin = document.querySelector('.begin');
        var stop = document.querySelector('.stop');
        var timer = null;   //全局变量,null是一个空对象。
        begin.addEventListener('click',function () {
            timer = setInterval(function () {
                console.log('fuck');
            },1000);
        })
        stop.addEventListener('click',function () {
            clearInterval(timer);
        })

 四、发送短信案例

1.点击按钮后,会禁用disabled 为true

2.同时按钮里面内容会变化,注意button里面的内容用innerHtml修改

3.里面的秒数是变化的,因此需要定时器

4.定义一个变量,在定时器里面不断递减

5.如果变量为0说明到了时间,需要停止定时器,并且恢复按钮到初始状态

<body>
    <div>
        手机号码:<input type="text"> <button>发送</button>
    </div>
    <script>
        var btn = document.querySelector('button');
        var time = 3;
        btn.addEventListener('click',function () {
            var timer = setInterval(function () {
                btn.disabled = true;
                if (time == 0) {
                    clearInterval(timer);
                    btn.innerHTML = '发送';
                    time = 3;
                    btn.disabled = false;
                } else {
                    btn.innerHTML = '还有'+ time +'秒';
                    time--;
                }
            },1000)
        })
    </script>
</body>

 3.this

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

学到现在,先了解一哈几个this指向

1.全局作用域或者普通函数中this指向的是全局对象window(注意定时器里的this也是指向window)

2.方法调用中谁调用this指向谁

3.构造函数中this指向狗咱函数的实例

四、JS执行队列

1.JS语言特点

JS语言的一大特点就是单线程,也就是同一时间只能做一件事。这是因为这门脚本语言诞生的使命所致--JS是为处理页面中的交互,以及操作DOM而诞生的。比如我们对某个DOM元素进行添加和删除操作,不能同时操作,应该先进行添加,之后再删除。

2.单线程

单线程就意味着,所有任务需要排队,前一个任务结束,才会执行后一个任务。这样所导致的问题就是:如果JS执行时间过长,这样就会导致页面渲染不连贯,导致页面加载阻塞的感觉。

3.同步和异步

一、同步

同步:前一个任务执行完再执行后一个任务,程序的执行顺序与任务的排列顺序是一致的。比如做饭的同步做法:烧水(10分钟),切菜,炒菜

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

二、异步

异步:当在做一件事时,由于这件事花费时间较长,因此在做这件事时,你还可以去做其他事。比如做饭的异步做法:烧水的同时,可以去切菜,炒菜

JS的异步是通过回调函数实现的。

一般而言,异步任务有以下三种类型

1.普通事件,如click,resize等

2.资源加载,如load,error等

3.定时器,包括setInteral, setTimeout等

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

4.JS执行机制

1.先执行执行栈中的同步任务

2.异步任务(回调函数)放入任务队列中

3.一旦执行栈中所有同步任务执行完毕,系统就会按次序读取任务队列中的异步任务,于是被读取的异步任务结束等待状态,进入执行栈,开始执行。

五、location对象

1.location对象

window对象给我们提供了一个location属性用于获取或设置窗体的url,并且可以用于解析url。因为这个属性返回的是一个对象,所以我们也可称这个属性为location对象。

2.url

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

 3.location对象的属性

 一、实现5秒自动跳页面的案例

<body>
    <button>我跳</button>
    <div>123</div>
    <script>
        var btn = document.querySelector('button');
        var div = document.querySelector('div');
        var time = 6;
        btn.addEventListener('click',function() {
            setInterval(function () {
                  if (time == 0 ) {
                 location.href = 'https://www.baidu.com';
                } else {
                  div.innerHTML = '还有' + time + '秒跳转';   //innerHTML是后面大写
                  time--;     
                }
            },1000)
        })
    </script>
</body>

二、实现数据在不同页面中传递的案例

 分析:

1.第一个登录页面,里面有提交表单,action提交到index.html页面

2.第二个页面,第二个页面可以使用第一个页面的参数,这样实现了一个数据不同页面之间的传递效果。

3.第二个页面之所以可以使用第一个页面的参数,是因为使用了url里面的location.search参数

4.第二个页面中,需要把这个参数提取

5.第一步去掉?利用substr

6.第二步利用=号 分割键 和 值   (' = ')

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


<body>
    <div></div>
    <script>
        var div = document.querySelector('div');
        var data = location.search.substr(1);   //去掉? substr('起始的位置',截取几个字符)
        var arr = data.split('=');            //利用=把字符串分割为数组  split('=')
        div.innerHTML = arr[1] + '欢迎你';
    </script>
</body>

 4.location对象的方法

六、navigator对象

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

下面前端代码可以判断用户哪个终端打开页面,并实现跳转。

 实现移动端和PC端的页面打开

七、history对象

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

 history对一般在实际开发中比较少用,但是会在OA办公系统中见到

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值