JavaScript学习笔记——BOM(上)

27 篇文章 0 订阅
24 篇文章 0 订阅

1. BOM概述

1.1 什么是BOM

BOM即浏览器对象模型,它提供了独立于内容而与浏览器窗口进行交互的对象,其核心对象是windows。
BOM由一系列相关的对象构成,并且每个对象都提供了很多方法与属性。

DOMBOM
文档对象模型浏览器对象模型
文档当作一个对象看待浏览器当作一个对象看待
DOM顶级对象是documentBOM顶级对象是window
DOM主要学习操作页面元素BOM主要学习浏览器窗口交互的一些对象
DOM是W3C标准规范BOM是浏览器厂商自定义,兼容性较差
1.2 Bom构成

BOM比DOM更大,它包含DOM
window对象是浏览器的顶级对象,他具有双重角色

  1. 它是JS访问浏览器窗口的一个接口
  2. 它是一个全局对象,定义在全局作用域中的变量、函数都会变成window对象的属性和方法(在调用时可省略window)
    如window.alert()可以写成alert()

2. window对象的常见事件

2.1 窗口加载事件
  window.onload = function(){};
  window.addEventListener('load', function(){});  

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

  1. 使用window.onload可以把JS代码写在页面元素上方
  2. window.onload传统注册事件方法只能写一次,如有多个,以最后一次为准
  3. 使用addEventListener无限制
 document.addEventListener('DOMContentLoaded',function(){});

DOMContentLoaded事件在DOM加载完成时就会触发(不包括样式表,图片,flash等等)
如果页面图片较多,加载时间过长,为避免影响交互,使用DOMComtentLoaded(IE9以上支持)

2.2 调整窗口大小事件
  window.onresize = function(){};
  window.addEventListener('resize', function(){});

window.onresize是调整窗口大小加载事件
注意

  1. 只要窗口大小发生像素变化,则触发该事件
  2. 可利用该事件完成响应式布局,window.innerWidth表示当前屏幕宽度
        window.addEventListener('resize', function(){
            console.log(innerWidth);
            if(window.innerWidth <= 800){
                alert('宽度小于800了');
            }
        }); 

3. 定时器

3.1 两种定时器

window对象提供了两种好用的定时器

  • setTimeout()
    • 语法规范:window.setTimeout(回调函数,延时时间);
    • window可省略
    • 延时时间单位为毫秒,若省略默认为0
    • 回调函数可直接写函数,也可写函数名
        setTimeout(function(){
            alert('恭喜发财');
        }, 3000);

        function callback(){
            alert('恭喜发财');
        }
        setTimeout(callback, 3000);
  • setIntervel()
    • 语法规范:window.setInterval(回调函数,延时时间);
    • window可省略
    • 延时时间单位为毫秒,若省略默认为0
    • 回调函数可直接写函数,也可写函数名或采取’函数名()'三种形式
    • 因为定时器可以有很多,所以经常给定时器赋值一个标识符
注意:
	1.setTimeout():延时时间到了,就去调用回调函数,只调用一次,然后结束定时器
	2.setInterval():每隔一个延时时间,就去调用回调函数,直到清除定时器
3.2 停止setTimeout()定时器
window.clearTimeout(定时器ID);

clearTimeout()方法取消先前通过setTimeout()建立的定时器

<body>
    <button>取消定时器</button>
    <script>
        var btn = document.querySelector('button');
        var timer = setTimeout(function(){
            alert('boom!');
            
        }, 3000);
        btn.addEventListener('click', function(){
            clearTimeout(timer);
        });

    </script>
</body>

以上案例,点击取消定时器,阻止定时炸弹爆炸

3.3 停止setInterval()定时器
window.clearInterval(定时器ID)

clearInterval()方法取消先前通过setInterval()建立的定时器

<body>
    <button class="btn01">人类的本质就是复读机!</button>
    <button class="btn02">人类的本质不是复读机!</button>

    <script>
        var btn01 = document.querySelector('.btn01');
        var timer = null;//定义为全局变量并赋值为null
        btn01.addEventListener('click', function(){
            clearInterval(timer);//避免定时器累加
            timer = setInterval(function(){
                console.log('你好吗?');
            },1000);
        });

        var btn02 = document.querySelector('.btn02');
        btn02.addEventListener('click', function(){
            clearInterval(timer);
        });

    </script>
</body>
案例:发送短信显示xx秒后可重新发送
案例分析
  • 按钮点击后,disabled修改为true
  • 按钮里的内容发生变化,(button里的内容通过innerHTML修改)
  • 秒数需要用到定时器,每隔1秒调用一次
  • 定义一个变量(倒计时秒数),在定时器里自减
  • 如果变量为0,清除定时器,并复原按钮状态
<body>
    手机号码:<input type="text"> <button>发送</button>
    <script>
        var btn = document.querySelector('button');
        var time = 3;
        btn.addEventListener('click', function(){
            var time = 3;
            btn.disabled = true;
            var timer = setInterval(function(){
                if(time == 0 ){
                    clearInterval(timer);
                    btn.disabled = false;
                    btn.innerHTML = '发送';
                    time = 3//需要重新开始
                }else{
                    btn.innerHTML = time + '秒后重新发送';
                    time--;
                }

            },1000)
        });
    </script>
</body>
3.4 this指向问题 参考链接:《彻底弄懂js中的this指向》

一般情况下this最终指向的是那个调用它的对象

  • 在方法调用中, 谁调用方法,this就指向谁
		//在方法调用中, 谁调用方法,this就指向谁
        var o = {
            sayHi:function(){
                console.log(this);//o
                
            }
        }
        o.sayHi();

        var btn = document.querySelector('button');
        btn.addEventListener('click', function(){
            console.log(this);//指向的是btn这个按钮对象
        })

  • 全局作用域或者普通函数中的this指向全局对象window(注意定时器里的this指向window),(函数可以看作window的方法)
        // 全局作用域或者普通函数中的this指向全局对象window(注意定时器里的this指向window)         
        console.log(this);//window

        function fn(){
            console.log(this);//window
        }
        fn();
  • 构造函数中this指向构造函数的实例
		// 构造函数中this指向构造函数的实例
        function Fun(){
            console.log(this);
        }

        var fun = new Fun();

参考资料:
1.黑马程序员pink老师——常用Web APIs教程
2.《彻底弄懂js中的this指向》

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值