[JS-DOM BOM学习笔记]BOM那些儿事儿

news/2024/7/19 14:55:03 标签: js, javascript

BOM那些事儿

  • 学习要求
  • BOM概述
    • 什么是BOM?
    • BOM的构成
  • window对象的常见事件
    • 窗口加载事件
      • `window.onload`
      • `window.DOMContentLoaded`
    • 调整窗口大小事件
  • 定时器
    • 两种定时器
      • `setTimeout()`定时器
        • 停止setTimeout()定时器
      • `setInterval()`定时器
        • 倒计时案例
        • `clearInterval()`停止定时器
        • 发送短信案例
      • this

学习要求

  • 能够说出什么是BOM
  • 能够知道浏览器的顶级对象window
  • 能够写出页面加载事件以及注意事项
  • 能够写出梁总定时器函数并说出区别
  • 能够说出JS执行机制
  • 能够使用location对象完成页面之间的跳转
  • 能够知晓navigator对象涉及的属性
  • 能够使用history提供的方法实现页面刷新

BOM概述

什么是BOM?

BOM即浏览器对象模型,它提供了独立于内容而与浏览器窗口进行交互的对象,其核心对象是window
BOM由一系列相关的对象构成,并且每个对象都提供了很多方法与属性
BOM缺乏标准,JavaScript语法的标准化组织是ECMA,DOM的标准化组织是W3C,BOM最初是Netscape浏览器标准的一部分

DOMBOM
把文档当作一个对象把浏览器当作一个对象
顶级对象是document顶级对象是window
主要是操作页面元素浏览器窗口交互的一些对象
W3C标准规范浏览器厂商在各自浏览器上定义的,兼容性较差

BOM的构成

BOM比DOM更大,它包含DOM

window
document
location
navigation
screen
history

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

  • 1.它是JS访问浏览器窗口的一个接口
  • 2.它是一个全局对象。定义在全局作用域中的变量,函数都会编程window对象的属性和方法,在调用的时候可以省略window,前面学习的对话框都属于window对象方法码如alert(),prompt()等

window对象的常见事件

窗口加载事件

window.onload

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

  • 1.有了window.onload就可以把JS代码写到页面元素的上方,因为onload是等页面内容全部加载完毕,再去执行处理函数。
  • 2.window.onload传统注册事件方式只能写一次,如果有多个,会以最后一个window.onload为准
  • 3.如果使用addEvenListener则没有限制

window.DOMContentLoaded

DOMContentLoaded事件触发时,仅当DOM加载完成,不包括样式表,图片,flash等等。
ie9以上才支持
如果页面的图片很多的话,从用户访问到onload触发可能需要较长的事件。交互效果就不能实现,必然影响用户的体验,此时用DOMContentLoaded事件比较合适
DOMContentLoaded是DOM加载完毕,加载速度比load更快一些

调整窗口大小事件

window.onresize是调整窗口大小加载事件,当触发时就调用的处理函数

  • 1.只要窗口大小发生像素变化,就会触发这个事件
  • 2.我们经常利用这个事件完成响应式布局。window.innerWidth当前屏幕的宽度
    <style>
        div{
            width: 200px;
            height: 200px;
            background-color: pink;
        }
    </style>
    <div></div>
    <script>javascript">
        var div=document.querySelector('div')
        window.addEventListener('resize',function(){
            console.log(window.innerWidth);
            if(window.innerWidth<=800){
                div.style.display='none'
            }else{
                div.style.display='block'
            }
        })
    </script>

定时器

两种定时器

window对象给我们提供了2个非常好用的方法-定时器

  • setTimeout()
  • setInterval()

setTimeout()定时器

setTimeout(调用函数,时间)方法用于设置一个定时器,该定时器在定时器到期后执行调用函数
这个函数我们也称为回调函数

停止setTimeout()定时器

window.clearTimeout(timeoutID)
clearTimeout()方法取消了先前通过调用setTimeout()建立的定时器

  • window可以省略
    <button>stop</button>
    <script>javascript">
        function callback(){
            console.log('爆炸了');
        }
        var timer1=setTimeout(callback,3000)
        var timer2=setTimeout(callback,5000)
        var btn=document.querySelector('button')
        btn.addEventListener('click',function(){
            clearTimeout(timer2)
        })
    </script>

setInterval()定时器

方法重复调用一个函数,每隔这个时间,就去调用一次回调函数。

  • 1.window可以省略
  • 2.这个调用函数可以直接写函数,或者写函数名或者采取字符串’函数名()‘三种形式
  • 3.间隔的毫秒数省略默认时0,如果写,必须时毫秒,表示每隔多少毫秒就自动调用这个函数
  • 4.因为定时器可能有很多,所以我们经常给定时器赋值一个标识符

倒计时案例

    <div>
        <span class="hour">1</span>
        <span class="minute">2</span>
        <span class="second">3</span>
    </div>
    <script>javascript">

        var hour=document.querySelector('.hour')
        var minute=document.querySelector('.minute')
        var second=document.querySelector('.second')
        var inputTime=+new Date('2021-6-1 18:00:00')
        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
            var m=parseInt(times/60%60)
            m=m<10?'0'+m:m
            var s=parseInt(times%60)
            s=s<10?'0'+s:s
            hour.innerHTML=h
            minute.innerHTML=m
            second.innerHTML=s
        }
    </script>

clearInterval()停止定时器

发送短信案例

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

            },1000)

        })
    </script>

this

this的指向在函数定义的时候时确定不了的,只有函数执行的时候才能确定this到底指向谁,一般情况下this的最终指向的时那个调用它的对象

  • 全局作用域或者普通函数中this指向全局对象window(注意定时器里面的this指向window)

http://www.niftyadmin.cn/n/1847100.html

相关文章

[JS-DOM BOM学习笔记]BOM那些儿事儿2

BOM那些儿事儿JS执行队列JS是单线程同步和异步同步异步JS执行机制loacation对象URL五秒钟之后跳转页面案例location对象的方法navigator对象history对象JS执行队列 JS是单线程 JavaScript语言的一大特点就是单线程&#xff0c;也就是说&#xff0c;同一个时间只能做一件事。这…

HRBUST - 2047 Rescue The Princess(atan2的用法)

链接&#xff1a;https://cn.vjudge.net/problem/HRBUST-2047 题意&#xff1a;T组样例。给出等边三角形A、B的坐标&#xff0c;求C的坐标&#xff0c;已知A、B、C按逆时针给出。 思路&#xff1a;画画图就清楚了。已知直线斜率&#xff0c;求直线一x轴的夹角&#xff0c;可以…

[如何用JavaScript征服Leetcode?]1.重复的子字符串

如何用JavaScript征服Leetcode?题目如下自己思路题解思路Leetcode第459题(简单题)—重复的子字符串 题目如下 自己思路 自己写出来的代码&#xff0c;虽然是用的JavaScript&#xff0c;但是一股浓浓的C的味道。 思路如下&#xff1a; 1.i从0到length的循环&#xff0c;这个…

C++中几个值得分析的小问题(1)

下面3个小问题都是我认为C Beginner应该能够解答或辨别清楚的。希望我们能通过题目挖掘更多的信息&#xff0c;而不仅仅局限在解题。我最喜欢说的话&#xff1a;能力有限&#xff0c;所以作为抛砖引玉&#xff0c;希望共同讨论&#xff0c;指出错误。 另外&#xff0c;我都是碰…

atan和atan2用法

https://blog.csdn.net/mmk27_word/article/details/83308836

[JS-DOM BOM学习笔记]元素offset,client,scroll系列与动画函数封装

PC端网页特效目标元素偏移量offset系列offset与style区别案例&#xff1a;获取鼠标在盒子内的坐标案例&#xff1a;模态框拖拽案例&#xff1a;仿京东放大镜效果页面元素可视区client系列案例&#xff1a;淘宝flexible.js源码分析匀速滚动scroll系列页面被卷去的头部案例&#…

(转)list_orderby

本文转载自&#xff1a;http://blog.csdn.net/liyifei21/article/details/6558098 一个条件排序情况 list.OrderBy(item > tem.State); 多个条件的情况下 list.OrderBy(item > new {item.State, item.OrderId });转载于:https://www.cnblogs.com/wpcnblog/p/4462492.html…