前端小白菜学习之BOM(window、innerWidth、innerHeight、addEventListener、localStorage、seesionStorage等

本文介绍了BOM(浏览器对象模型)的基础知识,包括window对象的属性和方法,如innerWidth、innerHeight、addEventListener和数据存储。讨论了如何利用这些特性进行自适应布局、事件监听和数据持久化,并强调了跨浏览器兼容性的重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、前言

BOM、DOM,DOM、BOM傻傻分不清楚。有哪些童鞋和我一样,不是特别清楚他们分别是干啥的,他们之间到底有什么关系?以及在使用过程中到底有哪些注意事项呢?

作为一名具备开发优良传统特性的开发,我搜了对于BOM、DOM的解释,由于两块内容偏多,我们本篇文章先写BOM相关,DOM相关下篇文章给出,会在文末给出一些信息预告。

内容较多较长,建议点赞收藏后再慢慢查看👀。

二、什么是BOM

1.官方解释

在很多前辈的文章里以及某些官方文档里都有对BOM的解释,在这里主要贴出w3c百度百科找到的相关解释。

1)w3c给出的解释如下:

在这里插入图片描述

2)百度百科给出的解释如下:

在这里插入图片描述

在这里插入图片描述

2.自己对BOM的理解

总结提炼一下就是:BOM(Browser Object Model)是JavaScriopt对浏览器进行链接的一种称呼,通过JavaScriopt对BOM进行操作从而操作浏览器,这些功能分别对应不同的对象、属性和方法,如浏览器窗口的打开关闭、窗口的尺寸、浏览器的历史记录、以及同一存储浏览器需要存储的某些信息的对象等,当然也可以自己依据项目的需要在window里添加该项目所需要的额外的属性、方法和对象。

⚠️注意:

BOM不像DOM有明确的统一的标准,因为每个浏览器都有自己的定义,所以某些属性和方法在使用的过程中,就需要做到兼容,特别是IE有比较多不太一样的地方。

三、BOM所包含的对象和属性-顶层对象window

浏览器通过一个个窗口呈现在用户眼前。该窗口为页面提供一个全局环境,对应的JavaScript语言也存在一个顶层对象,它提供全局环境(即全局作用域),所有代码都是在这个环境中运行。不过,顶层对象在各种实现里面是不统一的。浏览器里面,顶层对象是window,所以我们可以使用window.来对浏览器窗口进行一些操作,前文提到的浏览器窗口的打开关闭、窗口的尺寸、浏览器的历史记录、以及同一存储浏览器需要存储的某些信息的对象等就是由window对象统一管理的。

随便打开一个浏览器,打开该浏览器对应的JavaScript控制台,打印window看看window里面有些什么对象和属性。

我这里是Safari,便截个Safari的控制台打印的window的结果吧。
在这里插入图片描述

⚠️注意:

不同的浏览器,或者同一浏览器不同版本,打印出来的window对象可能不同。

四、比较常见或常用的window方法和对象有:

1. 窗口大小(尺寸):

innerWidth:浏览器窗口的内宽度
innerHeight:浏览器窗口的内高度

这两个属性在进行自适应设计/响应式布局时至关重要。不过

<think>好的,用户想了解BOM和Vue的关系,以及在Vue中如何使用BOM。首先,我需要明确BOM是什么。BOM是Browser Object Model,也就是浏览器对象模型,它允许JavaScript与浏览器窗口进行交互,包括window、document、location、navigator、screen、history等对象。而Vue.js是一个前端框架,主要用于构建用户界面,通常与DOM交互,但有时候也需要访问BOM来实现某些浏览器相关的功能。 接下来,用户可能想知道在Vue中如何正确使用BOM。因为Vue是响应式的,直接操作BOM可能会引起一些问题,比如在生命周期钩子中访问DOM元素可能还未渲染完成。所以需要说明正确的使用时机,比如在mounted钩子中访问DOM元素。 另外,Vue的推荐做法是尽量减少直接操作BOM,而是通过Vue的响应式系统或者事件监听来处理。例如,使用window.addEventListener来监听窗口大小变化,但需要注意在组件销毁时移除监听器,避免内存泄漏。这里可能需要提到beforeUnmount或beforeDestroy钩子来清理事件监听。 用户可能还会关心如何将BOM的属性或方法与Vue的数据绑定结合使用。例如,将窗口的宽度绑定到data中的某个属性,并在窗口resize时更新这个属性,从而实现响应式布局。这时候需要用到事件监听和数据属性的更新。 还需要考虑SSR(服务器端渲染)的情况,因为在服务端没有BOM对象,直接访问window或document会导致错误。因此,在Vue中使用BOM时需要做环境判断,确保只在客户端执行相关代码。比如使用typeof window !== 'undefined'来检查。 另外,可能涉及到的常见用例包括:获取窗口尺寸、操作URL参数、使用localStorage/sessionStorage、控制浏览器历史记录(如Vue Router的集成)等。这些都需要结合具体的BOM对象和Vue的生命周期方法来说明。 最后,用户可能需要一些示例代码来理解具体如何集成。比如在mounted钩子中访问window对象,或者在方法中使用location.href进行页面跳转。同时,也要提醒用户注意Vue的最佳实践,避免过度依赖BOM,保持组件的可测试性和可维护性。 总结一下,回答需要涵盖以下几点: 1. BOM的定义和常见对象。 2. Vue中访问BOM的时机(生命周期钩子)。 3. 事件监听和清理。 4. 响应式数据与BOM的结合。 5. SSR环境下的注意事项。 6. 常见用例和示例代码。 7. 最佳实践和注意事项。 需要确保回答结构清晰,分点说明,并给出代码示例。同时,根据用户提供的引用内容,可能需要在适当的地方添加引用标记,但用户提供的引用似乎和BOM与Vue的关系无关,可能是一个错误。因此,可能不需要使用该引用,或者需要确认是否有其他相关引用可用。</think>关于在Vue.js中使用BOM(浏览器对象模型)的集成与实践,以下是结构化说明: ### 一、BOM与Vue.js的关系 BOM(Browser Object Model)是浏览器提供的用于操作浏览器窗口和导航的API集合,包含$window$、$location$、$navigator$、$screen$、$history$等核心对象。Vue.js作为前端框架,主要通过虚拟DOM管理视图层,但在实际开发中仍需要直接操作BOM实现以下功能: - 获取浏览器窗口尺寸 - 操作URL参数 - 使用浏览器存储(localStorage/sessionStorage) - 控制页面跳转 ### 二、BOM集成要点 #### 1. 生命周期钩子中的访问 在Vue组件中访问BOM对象时,需确保DOM已渲染完成: ```javascript export default { mounted() { console.log(window.innerWidth); // 获取视口宽度 this.screenWidth = window.innerWidth; }, data() { return { screenWidth: 0 } } } ``` #### 2. 事件监听与清理 通过事件监听实现响应式更新,注意在组件销毁前移除监听: ```javascript export default { mounted() { window.addEventListener('resize', this.handleResize); }, beforeUnmount() { window.removeEventListener('resize', this.handleResize); }, methods: { handleResize() { this.screenWidth = window.innerWidth; } } } ``` #### 3. URL参数操作 通过$location$对象实现路由参数处理: ```javascript // 获取查询参数 const queryParams = new URLSearchParams(window.location.search); console.log(queryParams.get('id')); // Vue Router替代方案(推荐) this.$route.query.id ``` ### 三、服务端渲染(SSR)注意事项 在Nuxt.js等SSR框架中,需通过环境判断避免服务端报错: ```javascript if (process.client) { console.log(window.innerWidth); } ``` ### 四、最佳实践 1. **响应式封装**:将BOM属性转化为Vue响应式数据 ```javascript export default { data() { return { viewport: { width: 0, height: 0 } } }, mounted() { this.updateViewport(); window.addEventListener('resize', this.updateViewport); }, methods: { updateViewport() { this.viewport.width = window.innerWidth; this.viewport.height = window.innerHeight; } } } ``` 2. **浏览器存储封装**:对localStorage进行Vue式封装 ```javascript // storage.js export default { getItem(key) { return JSON.parse(localStorage.getItem(key)); }, setItem(key, value) { localStorage.setItem(key, JSON.stringify(value)); } } ``` ### 五、典型应用场景 1. 响应式布局(监听$resize$事件) 2. 页面跳转控制($window.location.href$) 3. 用户设备检测($navigator.userAgent$) 4. 历史记录管理(结合Vue Router使用$history.pushState$)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

蠢且丑

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值