H5在微信内嵌浏览器里页面高度获取不准怎么办?
我在做移动端H5页面,发现用微信打开时,window.innerHeight 获取的高度总是比实际可视区域小,底部留了一截空白,但Safari和Chrome都正常。
试过加 viewport 设置、监听 resize 事件,也用了 document.documentElement.clientHeight,还是不对。是不是微信浏览器有什么特殊的处理?
window.addEventListener('load', () => {
console.log('innerHeight:', window.innerHeight);
console.log('clientHeight:', document.documentElement.clientHeight);
});
首先你需要理解微信浏览器的工作机制。它会自动给页面加上一个工具栏,在页面滚动时这个工具栏可能会显示或隐藏,导致可视区域高度发生变化。所以我们不能单纯依赖 window.innerHeight 或 document.documentElement.clientHeight 来获取准确的高度。
试试下面这个方法:
这里需要注意,我们用了100vh来创建一个全屏元素进行测量,因为vh单位能更好地反映真实的视口高度。延迟500ms是为了等微信工具栏状态稳定下来再测量。
另外记得在resize事件中也调用这个函数,因为用户滚动时工具栏会变化,可能会影响页面布局。这个方案在我之前的项目里测试过,基本能解决这个问题。
要是还是有问题的话,建议检查下你的viewport设置,确保width=device-width, initial-scale=1.0这些基础配置都对了。有时候第三方插件或者样式问题也可能影响到高度计算。