一 、BOM概念
BOM(Browser Object Model)即浏览器对象模型,它提供了独立于内容而与浏览器窗口进行交互的对象,其核心对象是 window。
BOM 由一系列相关的对象构成,并且每个对象都提供了很多方法与属性。
与DOM的区别
浏览器对象模型 BOM把浏览器当做一个对象来看待 BOM 的顶级对象是 window BOM 学习的是浏览器窗口交互的一些对象 BOM 是浏览器厂商在各自浏览器上定义的,兼容性较差
DOM 把文档当做一个对象来看待 DOM 的顶级对象是 document DOM 主要学习的是操作页面元素 DOM 是 W3C 标准规范
1、BOM的组成(包含DOM)
window 对象是浏览器的顶级对象,它具有双重角色。
1. 它是 JS 访问浏览器窗口的一个接口。
2. 它是一个全局对象。定义在全局作用域中的变量、函数都会变成 window 对象的属性和方法。
3. 在调用的时候可以省略 window,前面学习的对话框都属于 window 对象方法,如 alert()、prompt() 等。
注意:window下的一个特殊属性 window.name
二、window对象的常见事件
1、窗口加载事件
1. DOMContentLoaded 事件触发时,仅当DOM加载完成,不包括样式表,图片,flash等等。
2. Ie9以上才支持
3. 如果页面的图片很多的话, 从用户访问到onload触发可能需要较长的时间, 交互效果就不能实现,必然影响用户的体验,此时用 DOMContentLoaded 事件比较合适。
2、调整窗口大小事件
window.onresize 是调整窗口大小加载事件, 当触发时就调用的处理函数。
注意:
1. 只要窗口大小发生像素变化,就会触发这个事件。
2. 我们经常利用这个事件完成响应式布局。 window.innerWidth 当前屏幕的宽度。
三、定时器
1、setTimeout() 定时器window.setTimeout(调用函数, [延迟的毫秒数]);
setTimeout() 方法用于设置一个定时器,该定时器在定时器到期后执行调用函数。
注意:
1. window 可以省略。
2. 这个调用函数可以直接写函数,或者写函数名或者采取字符串‘函数名()'三种形式。
3. 延迟的毫秒数省略默认是 0,如果写,必须是毫秒。
4. 因为定时器可能有很多,所以我们经常给定时器赋值一个标识符。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<script>
// window.setTimeout(function(){
// console.log('时间到了')
// },3000)
function fn()
{
console.log('到时了')
}
let time1=setTimeout(fn,3000)//三秒之后自动打印出到时间了
let time2=setTimeout(fn,5000)//五秒之后自动打印出来时间到了
// setTimeout('fn()',3000)
</script>
</body>
</html>
2、关闭定时器window.clearTimeout(timeoutID)
clearTimeout()方法取消了先前通过调用 setTimeout() 建立的定时器。
注意: 1. window 可以省略。 2. 里面的参数就是定时器的标识符
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<button>停止计时器</button>
<script>
const bt=document.querySelector('button')
let times=setTimeout(function(){
console.log('爆炸了')
},5000)//五秒 后打印出爆炸了
bt.addEventListener('click',function(){
clearTimeout(times)//给按钮绑定事件 清除定时器
})
</script>
</body>
</html>
3、setInterval() 定时器 window.setInterval(回调函数, [间隔的毫秒数]);
setInterval() 方法重复调用一个函数,每隔这个时间,就去调用一次回调函数。
注意: 1. window 可以省略。
2. 这个调用函数可以直接写函数,或者写函数名或者采取字符串 '函数名()' 三种形式。
3. 间隔的毫秒数省略默认是 0,如果写,必须是毫秒,表示每隔多少毫秒就自动调用这个函数。
4.因为定时器可能有很多,所以我们经常给定时器赋值一个标识符。
5. 第一次执行也是间隔毫秒数之后执行,之后每隔毫秒数就执行一次。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<script>
setInterval(function(){
console.log('持续输出')
},2000)
</script>
</body>
</html>
4、停止setInterval() 定时器 window.clearInterval(intervalID);
learInterval()方法取消了先前通过调用 setInterval()建立的定时器。
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>09-清除setInterval定时器</title>
</head>
<body>
<button class="begin">开启定时器</button>
<button class="stop">停止定时器</button>
<script type="text/javascript">
var begin = document.querySelector('.begin');
var stop = document.querySelector('.stop');
var timer = null; // 全局变量 null是一个空对象
begin.addEventListener('click', function () {
timer=setInterval(function(){
console.log('hi')
},2000)
})
stop.addEventListener('click', function () {
clearInterval(timer);
})
</script>
</body>
</html>
四、JS的执行机制
1、同步
2、异步
本质区别: 这条流水线上各个流程的执行顺序不同
3、同步任务
4、异步任务
5、执行顺序
由于主线程不断的重复获得任务、执行任务、再获取任务、再执行,所以这种机制被称为事件循环。
五、location对象
概念:window 对象给我们提供了一个 location 属性用于获取或设置窗体的 URL,并且可以用于解析 URL 。 因为这个属性返回的是一个对象,所以我们将这个属性也称为 location 对象。
六、navigator 对象
// 检测 userAgent(浏览器信息)
!(function () {
const userAgent = navigator.userAgent
// 验证是否为Android或iPhone
const android = userAgent.match(/(Android);?[\s\/]+([\d.]+)?/)
const iphone = userAgent.match(/(iPhone\sOS)\s([\d_]+)/)
// 如果是Android或iPhone,则跳转至移动站点
if (android || iphone) {
location.href = 'http://m.itcast.cn' }
})()
七、hhistory对象
window 对象给我们提供了一个 history 对象,与浏览器历史记录进行交互。该对象包含用户(在浏览器窗口中)访问过的 URL。