BOM(Browser Object Model)即浏览器对象模型,它提供了独立于内容而与浏览器窗口进行交互的对象,其核心对象是 window。BOM 由一系列相关的对象构成,并且每个对象都提供了很多方法与属性。
BOM 缺乏标准。JavaScript 语法的标准化组织是 ECMA,DOM 的标准化组织是 W3C,BOM 最初是Netscape 浏览器标准的一部分。
window对象是浏览器的顶级对象,它具有双重角色。
1、它是JS访问浏览器窗口的一个接口。
2、它是一个全局对象。定义在全局作用域中的变量、函数都会变成window对象的属性和方法。
在调用的时候可以省略window,前面学习的对话框都属于window对象方法,如alert()、prompt()等。
注意
window下的一个特殊属性 window.name
示例
<script>
var num = 10;
console.log(num);
console.log(window.num); // 完整的调用方法
function fn() {
console.log(11);
}
fn();
window.fn();
// var name = 10;
console.log(window.name); // 已经给name赋过值,即使只是掉,再调用也还是那个值
</script>
语法
window.onload = function () { }
// 或
window.addEventListener('load', function () { })
window.onload 是窗口 (页面)加载事件,当文档内容完全加载完成会触发该事件(包括图像、脚本文件、CSS 文件等), 就调用的处理函数。
注释
示例
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
<!-- 1、2、4 结果一样,点击“点击”按钮,弹出“点击我” -->
<!-- 2、3 的结果是弹出 22,点击“点击”按钮,不能弹出“点击我” -->
<!-- 4、5 的结果是弹出 22,点击“点击”按钮,弹出“点击我” -->
<!-- 试验这些时,别忘记注释掉其它的 -->
<script>
// 2
window.onload = function () {
var btn = document.querySelector('button');
btn.addEventListener('click', function () {
alert('点击我');
})
}
// 3
window.onload = function () {
alert(22);
}
// 4
window.addEventListener('load', function () {
var btn = document.querySelector('button');
btn.addEventListener('click', function () {
alert('点击我');
})
})
// 5
window.addEventListener('load', function () {
alert(22);
})
</script>
</head>
<body>
<button>点击</button>
<!-- 1 -->
<script>
var btn = document.querySelector('button');
btn.addEventListener('click', function () {
alert('点击我');
})
</script>
</body>
</html>
语法
document.addEventListener('DOMContentLoaded', function () { })
注释
DOMContentLoaded 事件触发时,仅当DOM加载完成,不包括样式表,图片,flash等等。
IE9以上才支持!!!
如果页面的图片很多的话, 从用户访问到onload触发可能需要较长的时间, 交互效果就不能实现,必然影响用户的体验,此时用DOMContentLoaded 事件比较合适。(加载速度比 load 更快一些)
示例
<script>
window.addEventListener('load', function () {
alert(22);
})
document.addEventListener('DOMContentLoaded', function () {
alert(33);
})
// 即使 DOMContentLoaded 在 load 下面,执行时也是先弹出 33 ,再弹出 22
</script>
语法
window.onresize = function () { }
// 或
window.addEventListener('resize', function () { })
注释
示例
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
<script>
// 注册页面加载事件
window.addEventListener('load', function () {
// 注册调整窗口大小事件
var div = document.querySelector('div');
window.addEventListener('resize', function () {
// window.innerWidth 获取窗口大小
console.log(window.innerWidth);
console.log('变化了');
if (window.innerWidth <= 800) {
div.style.display = 'none';
} else {
div.style.display = 'block';
}
})
})
</script>
<style>
div {
width: 200px;
height: 200px;
background-color: pink;
}
</style>
</head>
<body>
<div></div>
</body>
</html>
window 对象给我们提供了两个非常好用的方法 —— 定时器
语法
window.setTimeout(调用函数, [延迟的毫秒数]);
注释
示例
<script>
// 第一种 直接写函数
setTimeout(function () { console.log('时间到了'); }, 2000);
function boom() {
console.log('爆炸了');
}
// 第二种 写函数名
setTimeout(boom, 3000);
function end() {
console.log('终止');
}
// 第三种 字符串 '函数名()'
setTimeout('end()', 4000); // 不提倡这个写法
// 赋值一个标识符
// var time1 = setTimeout(callback, 3000);
// var time2 = setTimeout(callback, 5000);
</script>
<img src="images/ad.jpg" alt="">
<script>
var img = document.querySelector('img');
setTimeout(
function () {
img.style.display = 'none';
}, 5000);
</script>
语法
window.clearTimeout(timeoutID)
注释
示例
<button>点击停止定时器</button>
<script>
var btn = document.querySelector('button');
// 开启定时器
var timer = setTimeout(function () {
console.log('爆炸了');
}, 5000);
// 给按钮注册单击事件
btn.addEventListener('click', function () {
// 停止定时器
clearTimeout(timer);
})
</script>
语法
window.setInterval(调用函数, [间隔的毫秒数]);
注释
示例
<script>
// 1. setInterval
setInterval(function() {
console.log('继续输出');
}, 1000);
</script>
相关链接:https://blog.csdn.net/qq_45645902/article/details/105875149
语法
window.clearInterval(intervalID);
注释
示例
<body>
<button class="begin">开启定时器</button>
<button class="stop">停止定时器</button>
<script>
var begin = document.querySelector('.begin');
var stop = document.querySelector('.stop');
var timer = null; // 全局变量 null是一个空对象
begin.addEventListener('click', function () {
timer = setInterval(function () {
console.log('ni hao ma');
}, 1000);
})
stop.addEventListener('click', function () {
clearInterval(timer);
})
</script>
</body>
相关链接:https://blog.csdn.net/qq_45645902/article/details/105875093
this 的指向在函数定义的时候是确定不了的,只有函数执行的时候才能确定 this 到底指向谁,一般情况下 this 的最终指向的是那个调用它的对象。
示例
<body>
<button>点击</button>
<script>
// 一般情况下this的最终指向的是那个调用它的对象
// 1. 全局作用域或者普通函数中this指向全局对象window(注意定时器里面的this指向window)
console.log(this); // this指向的是 Window 这个对象
function fn() {
console.log(this); // this指向的是 Window 这个对象
}
window.fn();
window.setTimeout(function () {
console.log(this); // this指向的是 Window 这个对象
}, 1000);
// 2. 方法调用中谁调用this指向谁
var o = {
sayHi: function () {
console.log(this); // this指向的是 o 这个对象
}
}
o.sayHi();
var btn = document.querySelector('button');
btn.onclick = function () {
console.log(this); // this指向的是 btn 这个按钮对象
}
btn.addEventListener('click', function () {
console.log(this); // this指向的是 btn 这个按钮对象
})
// 3. 构造函数中this指向构造函数的实例
function Fun() {
console.log(this); // this 指向的是 fun 实例对象
}
var fun = new Fun();
</script>
</body>