BOM部分,常见事件,定时器,JS执行队列,location,navigator,history

BOM浏览器对象模型,从常见事件,定时器,JS执行队列,location,navigator,history方面

DOM和BOM的区别
DOMBOM
文档对象模型浏览器对象模型
把文档当做一个对象来看待把浏览器当做一个对象来看待
顶级对象是document顶级对象是window
主要学习的是操作页面的元素主要学习的是浏览器窗口交互的一些对象
标准是w3c浏览器厂家在浏览器上定义的,兼容性较差

我作图水平不太好,又没对齐QAQ

在这里插入图片描述

一、常见事件

1.窗口加载事件
a. window.onload = function() { }

注意

  1. 全部加载完再执行代码,所以这个就不用必须按代码执行顺序写
  2. 是传统的注册事件的方式,只能写一次,如果有多个,以最后一个为准
<body>
    <script>
        window.onload = function() {
            var btn = document.querySelector('button');
            btn.addEventListener("click", function() {
                alert('少年');
            })
        }
    </script>
    <button>花儿</button>
</body>
b. window.addEventListener(‘load’, function() { })

注意

  1. 这个和第一个相比就没有限制了,可以多个
  2. DOM、图片、css、flash…都加载完,再执行代码
<body>
    <script>
        window.addEventListener('load', function() {
            var btn = document.querySelector('button');
            btn.addEventListener("click", function() {
                alert('少年');
            })
        })
    </script>
    <button>花儿</button>
</body>
c.window.addEventListener(‘DOMContentLoaded’, function() { })

注意

  1. 这个是只有DOM加载完即可,无需等图片,css,flash…都加载完
<body>
    <script>
        window.addEventListener('DOMContentLoaded', function() {
            var btn = document.querySelector('button');
            btn.addEventListener("click", function() {
                alert('少年');
            })
        })
    </script>
    <button>花儿</button>
</body>
2.调整窗口大小
a.window.οnresize=function(){ }
b.window.addEventListener(“resize”, function() { })

注意

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

这里写一下b函数的代码。。。。。。

<body>
    <script>
        window.addEventListener('resize', function() {
            console.log(innerWidth);
            console.log('大小');
        })
    </script>

</body>

二、定时器

1.设置定时器setTimeout(调用函数或者是直接写的函数,延迟的毫秒数)

注意

  1. 原名是window.setTimeout(…,…),但是window可以省略
  2. 注意是毫秒数,如果不写默认值是0
  3. 可以是调用函数,也可以是直接写的函数,还有一种表达方式是’调用的函数名()’ ,这种不常用
  4. 有很多定时器的时候可以给定时器加标识符(就是起个名字)
  5. 这个函数叫做,回调函数callback,等到了时间再回头调用
<body>
    <script>
        setTimeout(function() {
            console.log('小明同学');//直接写函数
        }, 2000)
    </script>
</body>
<body>
    <script>
        function callback() {
            console.log('小明同学');
        }
        setTimeout(callback, 2000);//这种是调用函数滴
    </script>
</body>
2.清除定时器clearTimeout(定时器的标识符)
<body>
    <button>定时器停下来</button>
    <script>
        function callback() {
            console.log('小明同学');
        }
        var time1 = setTimeout(callback, 5000);
        var btn = document.querySelector('button');
        btn.onclick = function() {
            clearTimeout(time1);
        }
    </script>
</body>
3.setInterval(回调函数, 毫秒数);

注意

  1. 原名是window.setTimeout(…,…),但是window可以省略
  2. 注意是毫秒数,如果不写默认值是0
  3. 可以是调用函数,也可以是直接写的函数,还有一种表达方式是’调用的函数名()’ ,这种不大常用
  4. 有很多定时器的时候可以给定时器加标识符(就是起个名字)
  5. 这个函数叫做回调函数callback,等到了时间再回头调用
    以上这五条和setTimeout一样
    不一样的是setInterval函数每隔调用时间就调用函数,是不断重复的,而setTimeout只调用一次
<body>
    <script>
        function callback() {
            console.log('小明同学');
        }
        var time1 = setInterval(callback, 2000);
    </script>
</body>
4.清除定时器clearInterval(定时器的标识符)
<body>
    <button>定时器停下来</button>
    <script>
        function callback() {
            console.log('小明同学');
        }
        var time1 = setInterval(callback, 1000);
        var btn = document.querySelector('button');
        btn.onclick = function() {
            clearInterval(time1);
        }
    </script>
</body>
5.关于this的指向性问题

a.全局作用域或者普通函数中this指向全局变量window(注意定时器里的this指向window)
b.方法调用中谁调用this指向谁
c.构造函数中this指向构造函数的实例

三、JS执行队列

原来JS是单线程的一个时间只能做一件事,为了解决这个问题,JS出现了同步和异步(这里视频里面pink老师这个例子我觉得很生动)
同步:一件事接着一件事做,就像做饭 ,先十分钟烧水,站着等十分钟水烧开了,再去切菜。
异步:同时做几件事,就像做饭,烧水先把火打开,然后去切菜,锅里的水在烧着,菜也在切着。

同步任务都在主线上执行,形成一个执行线
异步任务通过回调函数实现,异步任务有以下三中类型
1. 普通事件,如click,resize
2. 资源加载,如load
3. 定时器
<body>
    <script>
        console.log('1');
        setTimeout(callback, 0);//注意这里是零秒哦,按照道理应该立即执行

        function callback() {
            console.log('3');
        }
        console.log('2');
    </script>
</body>

输出结果是1 2 3

  1. 先执行 执行线 中的同步任务。
  2. 异步任务放到任务队列中。
  3. 一旦执行线中的同步任务执行完,按照次序执行任务队列中的异步任务。
    又画画了。。。。
    在这里插入图片描述

四、location

用于获取或者设置URL,这是在B站截得图
在这里插入图片描述

获取
<body>
    <script>
        console.log(location.href);
    </script>
</body>
设置,可以实现页面跳转功能
<body>
    <button>B</button>
    <script>
        var btn = document.querySelector('button');
        btn.onclick = function() {
            location.href = "https://www.bilibili.com/";
        }
    </script>
</body>

五、navigator

navigator.userAgent可以获得浏览器的版本信息,还有是PC端还是移动端

六、history

相当于执行了浏览器的前进后退按钮
history.back();返回
history.forward();前进
history.go(1);往前进一步
history.go(-1);往后退一步

emmmm昨天写了写其他科的作业,今天接着刷视频来整一下BOM的部分。。。。。我还比较菜,有问题欢迎指正~

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值