BOM浏览器对象模型
1. BOM概述
(1). 什么是BOM?
(2). BOM的构成
2. window 对象的常见事件
(1). 窗口加载事件
// window.onload = function() {}
// // 或者
// window.addEventListener("load", function() {})
document.addEventListener('DOMContentloaded', function() {})
window.addEventListener('load', function() {
var btn = document.querySelector('button');
btn.addEventListener('click', function() {
alert('点击我');
})
})
window.addEventListener('load', function() {
alert(22);
})
document.addEventListener('DOMContentLoaded', function() {
alert(33);
})
// load 等页面内容全部加载完毕,包含页面dom元素,图片,flash,css等等
// DOMContentLoaded 是DOM加载完毕,不包含图片,flash,css等就可以执行,加载速度比load更快
(2). 调整窗口大小事件
window.onresize = function() {}
window.addEventListener("resize", function() {});
// window.onresize 是调整窗口大小加载事件,当触发时就调用的处理函数
// 注意:
// 1. 只要窗口大小像素发生变化,就会触发这个事件
// 2. 我们经常利用这个事件完成响应式布局。window.innerWidth当前屏幕的宽度
window.addEventListener('load', function() {
var div = document.querySelector('div');
window.addEventListener('resize', function() {
console.log(window.innerWidth);
console.log('变化了');
if (window.innerWidth <= 800) {
div.style.display = 'none';
} else {
div.style.display = 'block';
}
})
})
3. 定时器
(1). 两种定时器
(2). setTimeout() 定时器
window.setTimeout(调用函数, [延迟的毫秒数]);
setTimeout() 方法用于设置一个定时器,该定时器在定时器到期后执行调用函数
注意:
1. window可以省略
2. 这个调用函数可以直接写函数,或者写函数名或者采取字符串,'函数名()'三种形式。第三种不推荐
3. 延迟的毫秒数省略默认是0,如果写,必须是毫秒
4. 因为定时器可能有很多,所以我们经常给定时器赋值一个标识符
setTimeout(function() {
console.log('时间到了');
},2000);
function callback() {
console.log('爆炸了');
}
var timer1 = setTimeout(callback, 3000);
var timer2 = setTimeout(callback, 5000);
// setTimeout('callback()', 3000); // 不提倡这个写法
实例:5 秒后自动关闭广告
// <img src="" alt="" class="ad">
var ad = document.querySelector('.ad');
setTimeout(function() {
ad.style.display = 'none';
}, 5000);
(3). 停止setTimeout() 定时器
window.clearTimeout(timeoutID)
clearTimeout() 方法取消了当前通过调用setTimeout() 建立的定时器。
注意:
1. window可以省略
2. 里面的参数就是定时器的标识符。
var btn = document.querySelector('button');
var timer = setTimeout(function() {
console.log('爆炸了');
}, 5000);
btn.addEventListener('click', function() {
clearTimeout(timer);
})
(4). setnterval() 定时器
window.setInterval(回调函数, [间隔的毫秒数]);
setInterval() 方法重复调用一个函数,每隔这个时间,就去调用一次回调函数
注意:
1. window可以省略
2. 这个调用函数可以直接写函数,或者写函数名或者采取字符串 '函数名()' 三种形式
3. 间隔的毫秒数省略默认是0,如果写,必须毫秒,表示每隔多少毫秒就自动调用这个函数
4. 因为定时器可能有很多,所以我们经常给定时器赋值一个标识符
// 1. setInterval
// 语法规范:window.setInterval(调用函数,延时时间);
setInterval(function() {
console.log('继续输出');
}, 1000);
// 2. setTimeout 延时时间到了,就去调用这个回调函数,只调用一次,就结束了这个定时器
// 3. setInterval 每隔这个延时时间,就去调用这个回调函数,会调用很多次,重复调用这个函数
实例:京东秒杀
// 1. 获取元素
var hour = document.querySelector('.hour'); // 小时的黑色盒子
var minute = document.querySelector('.minute'); // 分钟的黑色盒子
var second = document.querySelector('.second'); // 秒数的黑色盒子
var inputTime = +new Date('2019-5-1 18:00:00'); // 返回的是用户输入时间总的毫秒数
countDown(); // 我们先调用一次这个函数,防止第一次刷新页面有空白
// 2. 开启定时器
setInterval(countDown, 1000);
function countDown() {
var nowTime = +new Date(); // 返回的是当前时间总的毫秒数
var times = (inputTime - nowTime) / 1000; // times是剩余时间总的秒数
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;
}
(5). 停止setInterval() 定时器
window.clearInterval(intervalID);
clearInterval() 方法取消了先前通过调用 setInterval() 建立的定时器
注意:
1. window 可以省略
2. 里面的参数就是定时器的标识符。
var begin = document.querySelector('.begin');
var stop = document.querySelector('.stop');
var timer = null;
begin.addEventListener('click', function() {
timer = setInterval(function() {
console.log('ni hao ma');
},1000);
});
stop.addEventListener('click', function() {
clearInterval(timer);
})
实例:发送短信
// 按钮点击后,会禁用disabled 为true
// 同时按钮里面的内容会发生变化,注意button里面的内容通过innerHTML修改
// 里面的秒数是变化的,因此需要用到定时器
// 定义一个变量,在定时器里面,不断衰减
// 如果变量为o 说明到了时间,我们需要停止定时器,并且复原按钮初始状态
// <input type="text">
// <button>点击</button>
<script>
var ipt = document.querySelector('input');
var btn = document.querySelector('button');
btn.addEventListener('click', function(){
var num = 6 ;
btn.disabled = true;
btn.innerHTML='还剩'+num+'秒';
var timer = setInterval(function() {
num--;
if (num >= 0) {
btn.innerHTML='还剩'+num+'秒';
btn.disabled = true;
} else {
btn.innerHTML = '点击';
btn.disabled = false;
clearInterval(timer);
}
}, 1000);
})
</script>
(6). this
this 的指向在函数定义的时候是确定不了的,只有函数执行的时候才能确定this到底指向谁,一般情况下this的最终指向的是那个调用他的对象
// this 指向问题,一般情况下this的最终指向的是那个调用它的对象
// 1. 全局作用域或者普通函数中this指向全局对象window(注意定时器里面的this指向window)
console.log(this);
function fn() {
console.log(this);
}
window.fn();
window.setTimeout(function() {
console.log(this);
}, 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();
4. js 执行机制
5. location对象
(1). 什么是location对象
window对象给我们提供了一个location属性用于获取或设置窗体的URL,并且可以用于解析URL。因为这个属性返回的是一个对象,所以我们将这个属性也称为location对象。
(2). URL
(3). location对象的属性
var btn = document.querySelector('button');
var div = document.querySelector('div');
btn.addEventListener('click', function() {
var timer = 5;
var timer1 = setInterval(function() {
if (timer === 0 ) {
location.href = 'http://www.baidu.com';
}
else {
timer--;
div.innerHTML = '还剩'+ timer +'秒后自动跳转!!';
}
}, 1000);
});
(4). location对象的方法
var btn = document.querySelector('button');
btn.addEventListener('click', function() {
// 记录浏览历史,所以可以实现后退功能
// location.assign('http://www.itcast.cn');
// 不记录浏览历史,所以不可以实现后退功能
// location.replace('http://www.itcast.cn');
location.reload(true);
})
6. navigator对象
7. history 对象