H5界面键盘弹起,整个界面上移

说下基本的问题,就是点击选择门店,会从下面弹出一个弹框,出现门店列表,然后列表上方会有一个搜索框,搜索门店,当点击搜索框时会弹起键盘,导致整个弹框上移,可能会导致搜索框跳出整个界面,如下图所示,如果字体或整个界面过大,搜索框就会跳出可视区域

 具体解决方法,如果是App环境的话直接可以在uniapp中的pages.js页面配置界面设置一个属性即可如下图所示,但是我这个是H5环境是直接挂在企业微信上面的,这个属性就不管用。

 

 所以只能另辟蹊径,找了其他方法,就是当键盘弹起时,设置这个弹框的位置向下移动,移动的高度为键盘的高度即可

在初始化时获取整个界面的可视区域,我这是在初始化查询的时候设置的高度,将这个值存起来,下面要用

然后获取键盘弹出时的高度,也存入一个值,这个方法可在mounted中调用,键盘弹起时这个方法会自动调用

然后再监听键盘的高度,用最开始的获取的可视高度-键盘弹起时的可视高度,就获取到了键盘的高度,

 将最后获取到的值赋给键盘设置样式即可,这样子键盘弹起和收起时高度也不会变化了

 下面看最后的演示

键盘弹起时界面不变形

### Vue3 和 UniApp 中监听键盘弹起高度的解决方案 在 Vue3 和 UniApp 的开发环境中,可以采用多种方法来监听软键盘的高度变化并处理相应的界面调整问题。以下是具体的实现方式: #### 方法一:使用 `@/utils/keyboardHeight` 工具类 如果项目中有现成工具类用于监听键盘高度的变化,则可以直接引入该模块进行操作[^1]。 ```javascript import keyboardListener from "@/utils/keyboardHeight"; // 添加键盘高度变化监听器 keyboardListener.onKeyboardHeightChange(({ height, extra }) => { console.log("键盘高度:", height); console.log("额外高度(iOS):", extra); // 可在此处更新页面布局逻辑 }); // 当组件销毁时移除监听器 onUnmounted(() => { keyboardListener.offKeyboardHeightChange(); }); ``` 此方法适用于已有封装好的工具库场景,能够快速集成到现有项目中。 --- #### 方法二:利用原生 API 实现键盘高度监听 对于未提供专用工具的情况,可借助 `Window.visualViewport` 或其他事件机制手动捕获软键盘触发的行为[^2]。 ##### H5 端实现思路 通过监听页面可视区域 (`visualViewport`) 的尺寸变化检测软键盘弹出与否。 ```javascript let initialHeight = window.innerHeight; function onResize() { const currentHeight = window.innerHeight; const keyboardHeight = initialHeight - currentHeight; if (keyboardHeight > 0) { console.log(`键盘弹起,高度为 ${keyboardHeight}px`); } else { console.log("键盘已收起"); } } window.addEventListener('resize', onResize); // 组件卸载时清理事件监听 onUnmounted(() => { window.removeEventListener('resize', onResize); }); ``` 这种方法依赖于浏览器对 `resize` 事件的支持程度,在部分老旧设备上可能需要额外适配。 --- #### 方法三:UniApp 提供的内置 API 针对移动端应用开发,推荐优先考虑 UniApp 自带功能完成需求。例如可通过 `onKeyboardHeightChange` 生命周期钩子获取动态数据[^2]。 ```javascript export default { data() { return { keyboardHeight: 0, }; }, methods: { handleKeyboardChange(e) { this.keyboardHeight = e.height || 0; console.log(`当前键盘高度为 ${this.keyboardHeight} px`); }, }, onLoad() { uni.onKeyboardHeightChange(this.handleKeyboardChange); }, onUnload() { uni.offKeyboardHeightChange(this.handleKeyboardChange); }, }; ``` 以上代码片段展示了如何绑定全局范围内的键盘状态改变回调函数,并及时同步至内部变量存储以便后续调用。 --- #### 封装与复用建议 为了提高代码质量以及降低维护成本,强烈建议将上述任意一种技术打包成为独立服务层或者插件形式发布出去共享给团队成员重复利用。 比如创建名为 `useKeyboardHeight.js` 的组合式 API 文件如下所示: ```javascript import { ref, onMounted, onUnmounted } from 'vue'; export function useKeyboardHeight() { const keyboardHeight = ref(0); const updateHeight = ({ height }) => { keyboardHeight.value = height; }; onMounted(() => { uni.onKeyboardHeightChange(updateHeight); }); onUnmounted(() => { uni.offKeyboardHeightChange(updateHeight); }); return { keyboardHeight }; } ``` 随后只需简单导入即可享受便捷体验: ```javascript <script setup> import { useKeyboardHeight } from '@/composables/useKeyboardHeight'; const { keyboardHeight } = useKeyboardHeight(); console.log(keyboardHeight); // 动态反映实时数值 </script> ``` --- ### 注意事项 - 不同平台间可能存在细微差异,请务必测试覆盖 Android/iOS/H5 多种环境。 - 若发现某些机型无法正常工作,尝试查阅官方文档寻找替代方案或联系技术支持寻求帮助。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值