BOM 提供了一些很实用的特性,如定时器、弹出框、窗口尺寸等。
1. 弹出框
BOM 提供了三种弹出框:
-
window.alert
警告框 -
window.prompt
提示框 -
window.confirm
确认框
调用弹出框时可以省略 window
。
1.1 警告框
警告框在 demo 和调试过程中比较常用。
window.alert('弹出!');
警告框没有其他交互,只有单纯的提示作用。
因为警告框长得不是很好看,在各个浏览器下的样式也不统一,所以正式产品很少会用到。
1.2 提示框
var result = window.prompt('操作不可逆,请输入 "确认" 以继续操作', '不了不了');
if (result === '确认') {
alert('操作成功');
}
1.3 确认框
确认框可以展示信息,同时询问用户是确定还是取消。
var result = window.confirm('确定要删除这条信息吗?');
if (result) {
alert('删除成功');
} else {
console.log('已取消');
}
2. 定时器
定时器特别常用,前面提到的事件优化中的节流防抖,也有定时器参与。
BOM 提供了两种定时器:
-
window.setTimeout
在一定时间后做一些事情 -
window.setInterval
每隔一段事件做一些事情
定时器并不是精确的,会因为上下文环境的各种因素产生偏差。
定时器的最小延迟事件是 4ms ,其在 HTML5 spec有被描述。
2.1 setTimeout
使用 setTimeout
创建的定时器会在一定时间后最一次事情,做完后就再也不会调用了。
setTimeout(要做的事情, 多少毫秒后做);
setTimeout(function() {
console.log('1秒过去了');
}, );
setTimeout('console.log("2秒过去了...?")', );
定时器是可以取消的,一种是利用标志进行取消。
var flag = false;
setTimeout(function() {
if (flag) return;
console.log('哈哈哈哈哈哈哈哈!');
}, );
flag = !confirm('五秒后会狂笑!');
利用标志,在定时器执行的时候判断,如果标志不成立,则不执行即可。
另一种是利用 clearTimeout
方法。
var timer = setTimeout(function() {
console.log('哈哈哈哈哈哈哈哈!');
}, );
if (!confirm('五秒后会狂笑!')) {
clearTimeout(timer);
}
2.2 setInterval
setInterval 和 setTimeout 区别就在后者只会执行一次,前者会一直反复执行。
setInterval(要做的事情, 多少毫秒后做);
var count = ;
setInterval(function() {
console.log((++count) + '秒过去了');
}, );
每过一秒钟,传递给定时器的函数就会执行一次。
setInterval 也可以被取消,但不推荐使用标志的形式,建议使用 clearInterval
。
var count = ;
var timer = setInterval(function() {
console.log((++count) + '秒过去了');
if (count >= ) {
console.log('不要浪费时间盯着这里啦');
clearInterval(timer);
}
}, );
用法和 clearTimeout
几乎一致,就不再赘述了。
3. 当前窗口的尺寸
function logSize() {
var width = window.innerWidth;
var height = window.innerHeight;
console.log('窗口尺寸:' + width + 'x' + height);
}
logSize();
window.addEventListener('resize', function() {
logSize();
});
4. 其他
API | 描述 |
---|---|
localStorage | 只读的 localStorage 属性允许你访问一个Document 源(origin)的对象 Storage;存储的数据将保存在浏览器会话中。 |
sessionStorage | sessionStorage 属性允许你访问一个,对应当前源的 session Storage 对象。它与 localStorage 相似,不同之处在于 localStorage 里面存储的数据没有过期时间设置,而存储在 sessionStorage 里面的数据在页面会话结束时会被清除。 |
opener | 返回打开当前窗口的那个窗口的引用,例如:在window A中打开了window B,B.opener 返回 A。 |
parent | 返回当前窗口的父窗口对象。 |
scrollTo | 滚动到文档中的某个坐标。 |