BOM 常用属性和方法
BOM 提供了一些很实用的特性,如定时器、弹出框、窗口尺寸等。
BOM 提供了三种弹出框:
三种弹出框都会阻塞 JavaScript 的执行,与弹出框交互后才会继续执行。
弹出框时可以省略 window
。
警告框在 demo 和调试过程中比较常用。
window.alert('弹出!');
alert 接受参数,即要的。
警告框没有其他交互,只有单纯的作用。
因为警告框长得不是很好看,在各个浏览器下的样式也不统一,所以正式产品很少会用到。
框也可以用于信息,同时还能向收集信息。
var 输入的 = window.prompt(信息, 输入框内的认值);
var result = window.prompt('操作不可逆,请输入 "确认" 以继续操作', '不了不了');
if (result === '确认') {
alert('操作成功');
}
确认框可以展示信息,同时询问是确定还是取消。
var 选择的结果 = window.confirm(信息);
var result = window.confirm('确定要这条信息吗?');
if (result) {
alert('成功');
} else {
console.log('已取消');
}
部分中系统的关键才做会使用弹出框,因为弹出框后整个窗口是无法操作的,可以提高警示作用。
定时器特别常用,前面提到的事件优化中的节流防抖,也有定时器参与。
BOM 提供了两种定时器:
定时器并不是精确的,会因为上下文环境的各种因素产生偏差。
定时器的最小延迟事件是 4ms ,其在 有被描述。
现代浏览器为了优化损耗等,使在非当前 tab
的中的定时器的最小延迟在 1000ms 以上。
setTimeout()设置定时器,该定时器在定时器到期或指定的一段。(MDN)
使用 setTimeout
创建的定时器会在一定时间后最一次事情,做完后就再也不会了。
setTimeout(的事情, 多少毫秒后做);
其中 的事情
可以是个,也可以是个字符串,但几乎没有使用字符串的场景,也不推荐使用字符串,原因可以参考 eval
相关。
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);
}
setTimeout 会返回数值,这个值是定时器的标志,通过传递给 clearTimeout
就可以取消定时任务。
他们其实差不多,但是非必要的情况下推荐使用 clearTimeout
。
setInterval 和 setTimeout 区别就在后者只会执行一次,前者会一直反复执行。
setInterval(的事情, 多少毫秒后做);
第参数和 setTimeout 一样,可以是字符串也可以是。
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
几乎一致,就不再赘述了。
通过 innerHeight
和 innerWidth
就可以到当前窗口的视口尺寸,视口可以理解为窗口中的部分。
function logSize() {
var width = window.innerWidth;
var height = window.innerHeight;
console.log('窗口尺寸:' + width + 'x' + height);
}
logSize();
window.addEventListener('resize', function() {
logSize();
});
开发网页应用的时候,BOM 相关的和用到的比较多的就是定时器和窗口尺寸。
window 下还有类似 parseInt、parseFloat 这样的数学相关的,但目前 ES6 标准将他们挪动到了 Number
下,也就是说可以通过 Number.parseInt
来,放到了本该属于他们的地方,但项目中如果要使用,推荐使用 shim 或者 polyfill,不然部分浏览器可能。