简单BOM总结

150 阅读4分钟

「这是我参与2022首次更文挑战的第21天,活动详情查看:2022首次更文挑战」。

BOM概述

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

BOM的构成

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

  1. 它是JS访问浏览器窗口的一个接口
  2. 它是一个全局对象 定义在全局作用域的变量、函数都会变成window对象的属性和方法 在调用的时候可以省略window 前面学习的对话框都属于window对象方法 如alert() prompt() 注意:window下有一个特殊属性window.name

window对象常见属性

窗口加载事件

//两种写法
 //window.onload = function(){}
 //window.addEventListener('load',function(){});
  1. 当文档内容完全加载完成后触发该事件(包括图像、脚本文件、CSS、文件)就调用的处理函数
  2. window.onload传统注册事件方式 只能写一次 如果有多个 会以最后一个window.onload为准
// load 等页面内容全部加载完毕,包含页面dom元素 图片 flash  css 等等
 window.addEventListener('load',function(){
    alert(1);
 })
// DOMContentLoaded 是DOM 加载完毕,不包含图片 flash css 等就可以执行 加载速度比 load更快一些
window.addEventListener('DOMContentLoaded',function(){
    alert(2);
  })

调整窗口大小事件

window.onresize是调整窗口大小加载事件 当触发时调用的处理函数 直接上例子

//css部分省略
   window.addEventListener('load', function() {
        var div = document.querySelector('div');
        window.addEventListener('resize', function() {
            console.log(window.innerWidth);
            console.log('变化了');
            if (window.innerWidth <= 800) { //宽度小于800,不显示
                div.style.display = 'none';
            } else {
                div.style.display = 'block';
            }
        })
    })

两种定时器

setTimeout()

setTimeout定时器的使用

//window可以省略,单位是毫秒,默认不写是0
//只调用一次就结束这个定时器
window.setTimeout(funtion(){
	console.log(1);
},1000)

//可以以这种调用函数的方式
//function time(){
	console.log(2);
}
setTimeout(time,2000)

停止setTimeout定时器

clearTimeout() 上案例

<button>结束定时器</button>

 var btn = document.querySelector('button');
    var timer = setTimeout(function(){
        console.log('定时器');
    },5000);
    btn.addEventListener('click',function(){
        clearTimeout(timer);
    })

setInterval()

setInterval()定时器 反复调用一个函数 每隔一段时间 就去调用一次回调函数 srtInterval(function(){ },间隔时间)

<body>
	<button class="begin">开启定时器</button>
	<button class="stop">停止定时器</button>
<script>
    var begin = document.querySelector('.begin');
    var stop = document.querySelector('.stop');
    var timer = null;     //定义一个全局变量 Null是一个空对象
    begin.addEventListener('click',function(){
          timer = setInterval(function(){
            console.log('开始');
        },1000);//每隔一秒就输出一次“开始”
    });
    stop.addEventListener('click',function(){
        clearInterval(timer);
    })
</script>
</body>

上两个常见案例

1.页面倒计时案例

   <style>
        div {
            margin: 200px;
        }

        span {
            display: inline-block;
            width: 40px;
            height: 40px;
            background-color: #333;
            font-size: 20px;
            color: #fff;
            text-align: center;
            line-height: 40px;
        }
    </style>
<script>
    // 1. 获取元素
    var hour = document.querySelector('.hour');
    var minute = document.querySelector('.minute');
    var second = document.querySelector('.second');
    var inputTime = new Date('2020-6-04 18:00:00');//现在的时间是2020-6-3
    countDown();// 我们先调用一次这个函数,防止第一次刷新页面有空白
    //3.定时器
    setInterval(countDown,1000);
    //2.时间
    function countDown(){
        var nowTime = new Date();
        var times = (inputTime - nowTime) / 1000;//变成秒
        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>

案例结果 在这里插入图片描述

2.发送短信定时器案例

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

定时器跳转页面案例

<body>
<div></div>
<script>
    //案例分析:定时器做倒数效果
    //时间一到 location.href跳转
    var div = document.querySelector('div');
    var time = 5;
    setInterval(function () {
        if (time == 0) {
            location.href = "https://space.bilibili.com/289427243/favlist?fid=810952643&ftype=create";
        } else {
            div.innerHTML = "页面将在" + time + "秒后跳转";
            time--;
        }
    }, 1000)
</script>
</body>

同步和异步

js语言的一大特点就是单线程,也就是说,同一时间只能做一件事情 为了解决这个问题,js出现了同步和异步

同步和异步

一般而言,js的异步是通过回调函数实现的,异步任务有一下几种类型

  1. 普通事件:click,resize等
  2. 资源加载:load,eroor等
  3. 定时器:setTimeout,setInterval

执行机制

  1. 先执行栈中的同步任务
  2. 遇见异步任务,先放在任务队列中
  3. 一旦执行栈里面的同步任务执行完毕,系统就会按次序执行任务队列里的异步任务,于是被读取的异步任务结束等待状态, 进入执行栈 开始执行

Location对象

  1. Location对象给我们提供了一个Location属性用于获取或设置窗体的URL,并且可以用来解析URL
  2. 因为这个属性返回的是一个对象,所以这个对象也被称为location对象 URL:统一资源定位器,是互联网上标准资源的地址,互联网上每一个文件都有一个唯一的URL地址,它包含的信息是文件位置以及浏览器该怎么处理它
//location对象属性       返回值
//location.href         获取或设置整个URL
//location.host         返回主机(域名)
//location.port         返回端口号 如果未写 返回空字符串
//location.pathname     返回路径
//location.search       返回参数
//location.hash         返回片段 #后面内容 常见于链接 瞄点

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

history对象

window对象给我提供了一个History对象,与浏览器历史进行交互

history.back();//后退功能
history.forward();//前进功能
history.go(参数);//前进或者后退,参数为负数就是后退几步,参数为正数就是前几几步

目前就想到这些~ ~ ~