BOM全称Browser Object Model(浏览器对象模型), 它提供了与浏览器窗口交互的对象和方法. 简单来说:
DOM: 操作网页内容(HTML元素).
BOM: 操作浏览器窗口和行为.
想象一下, DOM是你房间里的家具(可以移动、修改), 而BOM是你房间的窗户和门(可以打开、关闭、调整大小).
BOM的核心是window
对象, 它是JavaScript在浏览器中的全局对象. 我们常用的alert()
、setTimeout()
其实都是window
的方法.
二、window对象
window
对象有两个重要身份:
全局对象:在浏览器中, 所有全局变量和函数都是window
的属性和方法.
浏览器窗口: 代表浏览器窗口或标签页.
var myVar = "Hello";
console.log(window.myVar);
console.log(myVar === window.myVar);
function sayHi() {
console.log("Hi!");
}
window.sayHi();
2.1 常用window属性
让我们看看window
对象有哪些实用的属性:
1) window.innerWidth/window.innerHeight: 获取浏览器窗口的内部宽度和高度(不包括工具栏和滚动条)
2) window.outerWidth/window.outerHeight: 获取整个浏览器窗口的宽度和高度
3) window.location: 获取当前页面的URL信息
4) window.navigator: 获取浏览器信息, 例如: window.navigator.userAgent
5) window.screen: 获取用户屏幕信息, 例如: window.screen.width, window.screen.height
2.2 常用window方法
window
对象提供了许多实用的方法:
弹窗类:
alert():
警告框
confirm():
确认框(返回true/false)
prompt():
输入框(返回用户输入或null)
定时器:
setTimeout():
延迟执行
setInterval():
循环执行
clearTimeout()
/clearInterval():
清除定时器
窗口操作:
open():
打开新窗口
close():
关闭窗口
moveTo()
/moveBy():
移动窗口
resizeTo()
/resizeBy():
调整窗口大小
2.3 浏览器窗口操作示例
1) 打开新窗口:
const newWindow = window.open(
"https://www.example.com",
"exampleWindow",
"width=600,height=400"
);
参数说明:
窗口规格常用选项:
2)关闭窗口:
window.close();
newWindow.close();
通常只能关闭由JavaScript打开的窗口, 浏览器出于安全限制, 不允许脚本随意关闭用户打开的窗口.
3) 调整窗口的大小和位置:
window.moveTo(100, 200);
window.moveBy(50, 30);
window.resizeTo(800, 600);
window.resizeBy(100, -50);
出于用户体验和安全考虑, 这些方法通常只能用于由window.open()
创建的窗口, 或需要用户先与页面交互后才能使用.
if (newWindow.closed) {
console.log("新窗口已关闭");
}
window.focus();
window.blur();
var globalVar = "我是全局变量";
console.log(globalVar);
console.log(window.globalVar);
function globalFunc() {
console.log("我是全局函数");
}
globalFunc();
window.globalFunc();
ES6的let
和const
声明的变量不会成为window
的属性: let localLet = "我是let变量";
const localConst = "我是const常量";
console.log(window.localLet);
console.log(window.localConst);
function enterFullscreen() {
const element = document.documentElement;
if (element.requestFullscreen) {
element.requestFullscreen();
} else if (element.webkitRequestFullscreen) {
element.webkitRequestFullscreen();
} else if (element.msRequestFullscreen) {
element.msRequestFullscreen();
}
}
function exitFullscreen() {
if (document.exitFullscreen) {
document.exitFullscreen();
} else if (document.webkitExitFullscreen) {
document.webkitExitFullscreen();
} else if (document.msExitFullscreen) {
document.msExitFullscreen();
}
}
window.addEventListener("resize", () => {
console.log(`窗口大小已改变:${window.innerWidth} x ${window.innerHeight}`);
if (window.innerWidth < 768) {
console.log("小屏幕布局");
} else {
console.log("大屏幕布局");
}
});
const scrollTop = window.pageYOffset || document.documentElement.scrollTop;
window.scrollTo({
top: 500,
behavior: "smooth"
});
function scrollToTop() {
window.scrollTo({ top: 0, behavior: "smooth" });
}
function scrollToBottom() {
window.scrollTo({
top: document.body.scrollHeight,
behavior: "smooth"
});
}
好了, 今天的文章就讲到这里了, 记住, 虽然window
对象功能强大, 但现代Web开发更强调用户体验, 很多传统的窗口操作(如频繁弹窗)已经不推荐使用. 合理利用这些API, 可以创建既功能强大又用户友好的Web应用.
阅读原文:原文链接
该文章在 2025/7/17 10:09:34 编辑过