BOM汇总

本文介绍了BOM(浏览器对象模型)的核心对象window及其角色,包括事件对象如window.onload和resize,定时器的使用,JS执行机制,Location对象的属性和URL格式,以及Navigator和history对象的相关知识。通过案例分析,详细讲解了BOM在实际应用中的操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

BOM系列目录



前言

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


提示:以下是本篇文章正文内容,下面案例可供参考

一、BOM的构成

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

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

二、Window常见事件对象

window.onload = function() {}
或者
window.addEventListener('load',function() {});
window.onload就是页面加载事件,当文档内容全部加载完毕会触发该事件(包括图像、脚本文件、CSS文件等),就调用的处理函数
DOMContentLoaded 事件触发是,仅当DOM加载完毕,不包括样式表,图片和flash等等。
如果页面图片特别多,从用户访问onload到页面加载需要很多时间,因此可以用DOMContentLoaded.

❤窗口加载事件
window.onresize 是调整窗口大小加载事件,当触发时就调用的处理函数。
window.onresize = function() {}
window.addEventListener('resize',function(){});

<script>
        window.addEventListener('resize',function() {
          console.log('你真的好帅');

          只要窗口大小的像素发生变化就会触发该事件
        //   我们经常用这个事件完成响应式布局,window.innerWidth当前屏幕的宽度
        })
    </script>

三、定时器

两个定时器

  • setTimeout()
  • setInterval()
 <!-- setTimeout() 定时器 -->
    <!-- window.setTimeout (调用函数,[延迟的毫秒数])-->
    <!-- setTimeout()方法用于设置一个定时器,该定时器在定时器到期后执行调用函数  只调用一次 -->
    <script>
        // window在调用的时候经常省略
        // 这个调用函数可以直接写函数,也可以调用函数名
        // 页面中可能有很多的定时器,我们给他定时器加标识符(名字)
        setTimeout(function() {
            console.log('夕颜好帅');
        } ,200);
        function callback () {
            console.log(666);
        }
        var time1 = setTimeout(callback ,3000);
        var time1 = setTimeout(callback ,4000);
        // setTimeout(callback ,3000);
        // 停止定时器
        // 停止setTimeout()定时器
        window.clearTimeout(timeoutID);
        
    </script>

<!-- window.setInterval();   反复调用一个函数,每间隔这个时间,就去回调一次函数,可以多次调用-->
    <script>
        setInterval(function(){
            console.log('我好帅');
        },1000);
    </script>

案例1

1.这个倒计时是不断变化的,所以用定时器来自动变化setInterval()
2.三个黑色的盒子存放时分秒.
CSS设置

<style>
        div {
            margin: 100px auto;
        }
        span {
             display:inline-block;
            width: 100px;
            height: 100px;
            background-color: pink;
            line-height: 100px;
            margin :10px 20px;
            text-align: center;
        }
</style>

HTML设置

<!-- 1.这个倒计时是不断变化的,所以用定时器来自动变化setInterval() -->
    <!-- 2.三个黑色的盒子存放时分秒. -->
    <div>
        <span class="hour">1</span>
        <span class="minute">1</span>
        <span class="second">1</span>
    </div>

JS设置

<!-- 获取元素 -->
    <script>
        var hour = document.querySelector('.hour');
        var minute = document.querySelector('.minute');
        var second = document.querySelector('.second');
        var inputTime = +new Date('2022-6-30 9:05:00');
        // 页面刷新 会导致延迟  因此先调用函数一次
        countDown();
        // 开启定时器
        setInterval(countDown,1000);
        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="text" class="shuru"> <button>提交</button>
<script>
        // 获得元素
        var shuru = document.querySelector('.shuru');
        var btn = document.querySelector('button');
        var times = 5;
        btn.addEventListener('click', function() {
            btn.disabled = true ;
         var  timer=  setInterval(function(){
            // 清除定时器和复原按钮
            if (times == 0 ) {
                
                
                clearInterval(timer);
                btn.disabled = false ;
                btn.innerHTML = '提交'; 
                times = 5;  //这个5需要重新开始计算时间
            } else {
                btn.innerHTML = '还剩下'+times +'秒'; //拼接字符串
               times--;
            }
            
           } ,1000);   
        })
    </script>

this指向问题

 <!-- 全局作用域或者普通函数中this指向的全局对象window(注意定时器里面的this指向window) -->
    <!-- 2.方法调用中,谁调用thsi指向谁 -->
    <!-- 构造函数中的this指向构造函数的实例 -->
    <script>
        var o = {
            sayHi: function() {
                console.log(this);
            }
        }
        o.sayHi();
        function fun() {
            console.log(this);  //this指向 fun  实例对象
        }
        var fun = new fun();
    </script>

四、JS执行机制

 <!-- JS语言最大的特点就是单线程,同一个时间只能做一件事 -->
    <!-- 单线程意味着所有的任务都需要排队。 -->
    <!-- JS中出现了同步和异步 -->

      <!-- 1.同步任务 -->
      同步任务都在主线程上执行,形成一个执行栈。

      <!-- 2.异步任务 -->
      JS的异步是通过回调函数实现的
      一般而言,异步任务有以下三中类型;
      1.普通事件,如click | resize 等
      2.资源加载,如load | error等
      3.定时器,包括setInterval | setTimeout等
      异步任务相关回调函数添加到任务队列中(任务队列也称为消息队列)


      执行顺序
   1.先执行执行栈中的同步任务
   2.异步任务(回调函数)放入任务队列中  异步任务队列先进先出。
   3.一旦执行栈中的所有同步任务执行完毕,系统就会依次读取任务队列中的异步任务,于是被读取的异步任务结束等待状态,进入执行栈,开始执行

五、Location

location对象
window给我们提供了一个location属性用于获取或设置窗体的URL,并且可以用于解析URL。因为这个属性返回的是一个对象,所以我们也见这个属性成为location对象
统一资源定位符(Uniform Resource Locator,URL)是互联网上标准资源的地址
URL一般的语法格式为:
protocol://host[:port]/path/[?query]#fragment
http://www.itcast.cn/index.html?name=xiyan&age=18#link
protocol 通信协议 常用的http,ftp,matio等
host 主机域名 www.itheima.com
port 端口号可选 省略时使用方案默认端口如http的默认端口为80
path 路径 由 零或者多个’/'符号隔开的字符串 一般用来表示主机上的一个目录或者文件地址
query 参数 以键值对的形式 &符号分隔开
fragment 片段 #后面的内容 常用于链接 锚点

location属性
location.href 获取或者设置整个 URL
location.host 返回主机(域名)www.itheima.com
location.port 返回端口号 如果未写返回 空字符串
location.pathname 返回路径
location.search 返回参数
location.hash 返回片段

案例1-5s跳转页面

<button>跳转</button>
    <div></div>
    <script>
        var btn = document.querySelector('button');
        var div = document.querySelector('div');
        btn.addEventListener('click',function(){

            location.href = 'http://www.baidu.com';
        })
          var timer =5;
       
            setInterval(function(){
                if ( timer == 0 ) {
            location.href = 'http://www.baidu.com';
            timer = 5;
        } 
        else {
            div.innerHTML = '您将在' + timer+ '秒钟后跳转到首页'
            timer--;
            }
          }
        ,500)
    </script>

案例2-获取URL参数
1.第一个登陆界面 里面有提交表单 action提交到index.html页面
2.第二个页面,可以使用第一个页面参数,这样实现了以一个数据不同页面之间的传递效果
3.第二个页面和第三个页面之所以可以使用第一个页面的数据,是利用了URL里面的location.search参数。
4.在第二个页面中。需要把这个参数提取
5.第一步去掉? 利用substr
6.第二部 利用=号分割键和值 split('= ')

login.html

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

index.html

<div></div>
    <script>
        console.log(location.search); //通过location.search把传递的参数取过来
    // 1.先去掉? substr('起始的位置',截取几个字符);
    var params = location.search.slice('1'); // uname = 123;
    console.log(params); 

    // 利用 =把字符串分割成数组 split('=');
    var arr = params.split('=');
  var div = document.querySelector('div')
//   把获取的参数存放在div盒子里面
  div.innerHTML = arr[1] + '你好帅';
    </script>

六、Navigator

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

七、history对象

<a href="list.html">点击去往列表页面</a>
    <button>
        前进
    </button>
    <script>
        // back() 可以后退功能
        // forward() 前进功能
        // go(参数) 前进功能,后退功能 参数如果是1,前进一个页面 ,-1后退一个页面
        var btn = document.querySelector('button');
        btn.addEventListener('click' ,function(){
            history.forward();
        } ,)
    </script>

list.html

 <div>123</div>

总结

BOM到这就已经完结了

<<---------------------------------------------案例-------------------------------------------------------------------->>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值