通过元素的 getBoundingClientRect() 方法获取元素的实际宽高与实际展示的不符合
我的代码:通过 css 设置样式,当 body 属性 v-direction=1 时,设置一个高度,默认会设置一个高度
.container { .video-container { height: 400px; } } body[v-direction='1'] { .container { .video-container { height: calc(100% - 90px); } } }
现象:通过元素的 getBoundingClientRect() 获取的元素宽高与实际展示的不相符
原因:这里获取的是初始化给该元素设置的宽高,如果后续通过 css 媒体查询或者其他条件修改了元素的宽高,这里会有一个异步或时间顺序问题,导致获取的与实际的不一致
解决:由于我这里的属性 v-direction 视频的方向是通过监听视频的相关事件获取之后,赋值到 body 上的,所以这里是一个异步函数,执行顺序一定在 getBoundingClientRect() 之后,于是我需要加个 setTimeout
setTimeout(() => { const obj = container.getBoundingClientRect() }, 10)
他的执行顺序在异步设置 v-direction 属性的逻辑之后,即可。
分类:
javascript
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
2022-08-17 手写promise.all和 promise.race
2022-08-17 js实现 delay 和 sleep函数
2022-08-17 手写实现 js 中的bind,并实现 softBind