你用过js中BOM对象的哪些API?

全局对象

  • window:表示当前窗口或者全局环境。
// 获取当前窗口的标题
const title = window.document.title;
  • document:表示当前文档对象。
// 获取当前文档的URL地址
const url = document.URL;

屏幕信息

  • screen.availWidthscreen.availHeight:表示屏幕可用宽度和高度,即不包括任务栏、工具栏等非内容区域。
// 获取屏幕可用宽度和高度
const availWidth = screen.availWidth;
const availHeight = screen.availHeight;
  • screen.widthscreen.height:表示整个屏幕的实际宽度和高度。
// 获取屏幕实际宽度和高度
const actualWidth = screen.width;
const actualHeight = screen.height;

窗口信息

  • innerWidthinnerHeight:表示浏览器当前窗口的可视区域大小,即不包括浏览器的菜单栏、工具栏等非内容区域。
// 获取浏览器窗口的可视区域大小
const viewWidth = window.innerWidth;
const viewHeight = window.innerHeight;
  • outerWidthouterHeight:表示浏览器当前窗口的外部大小,即包括浏览器的菜单栏、工具栏等非内容区域。
// 获取浏览器窗口的外部大小
const outerWidth = window.outerWidth;
const outerHeight = window.outerHeight;

滚动条

  • scrollTo()scrollBy():用于滚动浏览器窗口中的内容,分别可以滚动到指定位置或者根据当前位置滚动一定距离。
// 将页面滚动到(0, 500)位置
window.scrollTo(0, 500);
​
// 将页面向下滚动50像素
window.scrollBy(0, 50);

窗口操作

  • resizeTo()resizeBy():用于调整浏览器窗口的大小,分别可以把窗口调整到指定大小或者根据当前大小调整一定量。
let w = window.open('','', 'width=100,height=100');
w.focus();
// 将浏览器窗口大小调整为宽度500px,高度600px
w.resizeTo(500, 600);
​
// 将浏览器窗口大小增加100px
// w.resizeBy(100, 100);
​
w.focus();

弹窗操作

  • alert():弹出一个包含指定消息和 OK 按钮的警告框。
alert('Hello, world!'); // 显示消息 "Hello, world!" 并等待用户点击 OK 按钮
  • confirm():弹出一个包含指定消息、OK 和 Cancel 按钮的确认对话框,并返回用户选择的布尔值。如果用户点击 OK,返回 true;如果用户点击 Cancel,返回 false。
let confirmed = confirm('Are you sure?'); // 显示询问消息并等待用户点击 OK 或 Cancel 按钮
if (confirmed) {
  console.log('User clicked OK.');
} else {
  console.log('User clicked Cancel.');
}
  • prompt():弹出一个包含指定消息、文本输入字段和 OK 和 Cancel 按钮的提示框,并返回用户输入的字符串。如果用户点击 OK,则返回用户输入的字符串,如果用户点击 Cancel,则返回 null。
let inputVal = prompt('Please enter your name:', ''); // 显示提示消息和文本输入框,并等待用户输入和点击 OK 或 Cancel 按钮
if (inputVal !== null) { // 如果用户点击了 OK
  console.log('User entered:', inputVal); // 输出用户输入的内容
} else { // 如果用户点击了 Cancel
  console.log('User clicked Cancel.');
}

URL信息

  • location:表示当前页面的URL信息,提供了许多操作URL的方法和属性。
console.log(window.location)

历史记录

  • history:表示浏览器的历史记录,提供了许多操作历史记录的方法和属性。
// 后退一步
window.history.back();
​
// 前进一步
window.history.forward();
​
// 刷新当前页面
window.history.go(0);
​
// 后退两步
window.history.go(-2);
​
// 前进三步
window.history.go(3);
console.log(window.history.length); // 获取当前历史记录长度

浏览器信息

  • navigator:表示浏览器本身的信息,包括浏览器厂商、版本、语言等,提供了一些判断浏览器类型和特性的方法和属性。
console.log(window.navigator)

定时任务

  • setInterval()setTimeout():可以周期性或者延时执行指定的函数。
  • clearTimeout()clearInterval():用于取消之前通过setTimeout()setInterval()创建的延迟任务。
function myFunction() {
  console.log('定时器触发!');
}
// setInterval
let timerId = window.setTimeout(myFunction, 3000);
​
// 取消定时器
window.clearTimeout(timerId);

针绘制

  • requestAnimationFramecancelAnimationFrame:方法告诉浏览器您希望执行动画并请求浏览器调用指定函数在下一次重绘之前更新动画。相当于延迟了一帧执行脚本,避免了会导致抖动和闪烁的操作(例如 DOM 操作)与浏览器渲染造成冲突的情况。
<div id="circle"></div>
<script>
    const circle = document.getElementById('circle');
    let angle = 0; // 初始角度为 0
    function animate() {
        angle++; // 每次更新角度值
        circle.style.transform = `rotate(${angle}deg)`; // 应用新的 CSS 变换
        requestAnimationFrame(animate); // 递归调用自身,实现动画效果
    }
    // 开始播放动画
    requestAnimationFrame(animate);
</script>
<style>
    #circle {
        width: 100px;
        height: 100px;
        border-radius: 50%;
        background-color: blue;
    }    
</style>

跨域消息

  • postMessage(message, targetOrigin) 向其他窗口发送跨域消息
// 发送消息
window.postMessage('Hello from the parent window!', 'http://example.com');
​
// 接收消息(需要在子窗口中添加事件监听器)
window.addEventListener('message', function(event) {
  if (event.origin === 'http://example.com') {
    console.log('Received message:', event.data);
  }
});

还有其他一些不常用的API,不过这些API已经足够满足大部分Web开发需求了。需要注意的是,BOM并不是W3C标准定义的一部分,不同浏览器厂商实现的BOM可能存在一些差异。

全部评论

相关推荐

2025-12-12 19:01
南京航空航天大学 C++
秋招没咋投,准备&nbsp;wxg&nbsp;转正之后摆烂了。结果不堪字节&nbsp;HR&nbsp;的骚扰还是面了一下字节。之前想去字节的时候怎么面都挂。现在想着随便面一下结果三面技术面都意外顺利还有加面。十月中旬字节发了意向,wxg&nbsp;转正结果无响应。十月底字节拉了保温群,wxg&nbsp;口头通过,系统显示考核中。十一月初和字节&nbsp;ld&nbsp;交流之后得知&nbsp;base&nbsp;居然能选海外,甚至能小&nbsp;wlb&nbsp;一下,wxg&nbsp;无响应无人联系。十一月中旬把字节&nbsp;base&nbsp;转到了海外,wxg&nbsp;流程灰了,一问超时忘处理了,过两天又变考核中了。十一月下旬字节换了海外&nbsp;HR&nbsp;对接,问了期望薪资,wxg&nbsp;考核终于显示通过,无&nbsp;HR&nbsp;保温,无其他保温。十一月底给字节报了个天价,想吓吓他们,同时告诉微信字节要开了,微信无响应。同样十一月底字节&nbsp;HR&nbsp;告诉我确实给不到那么高,但是能拿期权补上,问能不能接受。微信无响应。同样十一月底字节&nbsp;HR&nbsp;告知了具体方案,符合预期。&nbsp;微信无响应。十二月上旬催&nbsp;wxg&nbsp;不开我就盲拒了,wxg&nbsp;HR&nbsp;火急火燎的打电话问情况,问期望。我给了一个不算夸张的总包数字,因为今年市场在涨,过了三天还不联系我,我再催,约时间下午打电话,非得在我给出的数字上压下去几万,微信又不差这点,为什么不能满足我,让我没有拒绝的理由呢?一番纠结抗争,求稳还是追求挑战,最终选择接受迎接新的挑战,因为堂吉诃德永远不会停下脚步!回想起来,在&nbsp;wxg&nbsp;谈薪的阶段,我认为并没有给予我一定的重视,即使&nbsp;HR&nbsp;表示我在实习期间的表现和之前的面评都很靠前。也没有感觉到想要争取我,虽然我表示拒了&nbsp;offer&nbsp;之后要给我加面委定&nbsp;t6&nbsp;再涨,但我三个月没面试让我面面委那就是白给,还是算了。有缘再见了我亲爱的&nbsp;wxg,再见了曾经的梦中情厂,再见亲爱的&nbsp;mt,再见亲爱的朋友们。也再见,北京的一切。我想润了。秋招结束,卸载牛客,下一个三年,下一个五年,下一个十年后再来看看。
面试中的大熊猫爱吃薯...:我嫉妒得狗眼通红
点赞 评论 收藏
分享
2025-11-10 21:00
门头沟学院 Java
程序员牛肉:没啥必要了,3月末就开暑期实习了,你现在找还不一定能找到。看你啥学历了。 双非基本代表想进好公司无望了。211的话,现在继续沉淀,零日常实习参加暑期其实也压力不太大
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务