Bom基础

Bom是浏览器对象模型,我们前面接触到的Dom文档对象模型,是操作页面元素的,这里的Bom是和浏览器交互的.

1.window

dom中的顶级对象是document,bom中的顶级对象是window,window中是包括document的.

2.load事件

开发中,我们通常需要在文档元素加载完毕后才开始写js代码,以避免在js中获取不到dom元素的问题,这时我们可以在window.onload回调中编写我们的js代码,它会在页面元素加载完毕后调用:

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0">
    <title>bom</title>
    <style>
        .content-box {
            width: 450px;
            height: 700px;
            background-color: pink;
            margin: 0 auto;
            text-align: center;
            overflow: hidden;
        }
    </style>

    <script>
        //获取button
        let button = document.querySelector('button');
        //获取num盒子
        let numDiv = document.querySelector('.num');
        //声明点击时要执行的函数
        let onClickBtn = function() {
                console.log(window);
            }
            //绑定点击事件
        button.addEventListener('click', onClickBtn);
    </script>
</head>

<body>
    <div class="content-box">
        <button>button</button>
        <div class="num">
            0
        </div>
    </div>
</body>

</html>

当我们在head中编写js代码获取dom标签时,由于页面从上往下的执行顺序,这时获取到的dom标签为null:
 

我们需要在onload中编写逻辑:

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0">
    <title>bom</title>
    <style>
        .content-box {
            width: 450px;
            height: 700px;
            background-color: pink;
            margin: 0 auto;
            text-align: center;
            overflow: hidden;
        }
    </style>

    <script>
        window.addEventListener('load', function() {
            //获取button
            let button = document.querySelector('button');
            //获取num盒子
            let numDiv = document.querySelector('.num');
            //声明点击时要执行的函数
            let onClickBtn = function() {
                    console.log(window);
                }
                //绑定点击事件
            button.addEventListener('click', onClickBtn);
        });
    </script>
</head>

<body>
    <div class="content-box">
        <button>button</button>
        <div class="num">
            0
        </div>
    </div>
</body>

</html>

3.resize事件

当浏览器窗口大小变化时会触发resize事件:

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0">
    <title>bom</title>
    <style>
        .content-box {
            width: 450px;
            height: 700px;
            background-color: pink;
            margin: 0 auto;
            text-align: center;
            overflow: hidden;
        }
    </style>

    <script>
        window.addEventListener('load', function() {
            //获取button
            let button = document.querySelector('button');
            //获取num盒子
            let numDiv = document.querySelector('.num');

            let onResize = function() {
                    numDiv.innerText = window.innerHeight + ':' + window.innerWidth;
                }
                //绑定resize事件
            window.addEventListener('resize', onResize);
        });
    </script>
</head>

<body>
    <div class="content-box">
        <button>button</button>
        <div class="num">
            0
        </div>
    </div>
</body>

</html>

当浏览器窗口发生变化时,我们可以在resize事件中做相应的事情.

4.定时器

(1)setTimeout/clearTimeout

setTimeout接收两个参数,第一个是回调函数,第二个是延迟毫秒数,会返回当前定时器的id,以供取消定时器使用:

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0">
    <title>bom</title>
    <style>
        .content-box {
            width: 450px;
            height: 700px;
            background-color: pink;
            margin: 0 auto;
            text-align: center;
            overflow: hidden;
        }
    </style>

    <script>
        window.addEventListener('load', function() {
            //获取button
            let button = document.querySelector('button');
            //获取num盒子
            let numDiv = document.querySelector('.num');
            //声明点击时要执行的函数
            let onClick = function() {
                let id = window.setTimeout(timeout, 3000);
                console.log(id);
            }
            let timeout = function() {
                    console.log('setTimeout callback');
                }
                //绑定点击事件
            button.addEventListener('click', onClick);
        });
    </script>
</head>

<body>
    <div class="content-box">
        <button>button</button>
        <div class="num">
            0
        </div>
    </div>
</body>

</html>

对应的取消定时器的方法为clearTimeout,只需要把定时器id传递过去即可:

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0">
    <title>bom</title>
    <style>
        .content-box {
            width: 450px;
            height: 700px;
            background-color: pink;
            margin: 0 auto;
            text-align: center;
            overflow: hidden;
        }
    </style>

    <script>
        window.addEventListener('load', function() {
            //获取添加计时器button
            let buttonAdd = document.querySelector('.add-btn');
            //获取删除计时器button
            let buttonRemove = document.querySelector('.remove-btn');
            let currentId;
            //声明添加时要执行的函数
            let onClickAdd = function() {
                    currentId = window.setTimeout(timeout, 3000);
                }
                //声明删除时要执行的函数
            let onClickRemove = function() {
                window.clearTimeout(currentId);
            }
            let timeout = function() {
                    console.log('setTimeout callback');
                }
                //绑定点击事件
            buttonAdd.addEventListener('click', onClickAdd);
            buttonRemove.addEventListener('click', onClickRemove);
        });
    </script>
</head>

<body>
    <div class="content-box">
        <button class="add-btn">添加计时器</button>
        <button class="remove-btn">删除计时器</button>
    </div>
</body>

</html>

这样,未执行的定时器就会被清除掉.

(2)setInterval/clearInterval

setInterval和clearInterval用法同timeout相似,功能上有所不同,interval每隔相应的时间都会调用一次回调函数,直至此定时器被移除:

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0">
    <title>bom</title>
    <style>
        .content-box {
            width: 450px;
            height: 700px;
            background-color: pink;
            margin: 0 auto;
            text-align: center;
            overflow: hidden;
        }
    </style>

    <script>
        window.addEventListener('load', function() {
            //获取添加计时器button
            let buttonAdd = document.querySelector('.add-btn');
            //获取删除计时器button
            let buttonRemove = document.querySelector('.remove-btn');
            let currentId;
            //声明添加时要执行的函数
            let onClickAdd = function() {
                    currentId = window.setInterval(interval, 1000);
                }
                //声明删除时要执行的函数
            let onClickRemove = function() {
                window.clearInterval(currentId);
            }
            let interval = function() {
                    console.log('setInterval callback');
                }
                //绑定点击事件
            buttonAdd.addEventListener('click', onClickAdd);
            buttonRemove.addEventListener('click', onClickRemove);
        });
    </script>
</head>

<body>
    <div class="content-box">
        <button class="add-btn">添加计时器</button>
        <button class="remove-btn">删除计时器</button>
    </div>
</body>

</html>

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值