uni,H5页面,解决软键盘弹起页面被挤压、被往顶的问题

2023-12-26 08:58

本文主要是介绍uni,H5页面,解决软键盘弹起页面被挤压、被往顶的问题,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

具体问题

我是一个全屏的H5页面,高度用的是100vh,全屏 = 页面。

input输入框固定在底部,input聚焦时软键盘弹出,安卓时页面被压缩,变成了全屏 = 页面 + 软键盘,页面就变形了。

ios是整个页面会被往上顶,发生滚动。

解决办法

第一步:解决页面被压缩、往上顶问题
测试发现,当iput框位置高于软键盘弹出的位置时页面不会被挤压、往上顶,而input聚焦的操作先于软键盘弹出,所以当input聚焦时使input的位置高于软键盘弹出位置。

这时如果不做任何操作的话,input框的位置是有问题的,所以与此同时我们要将input框还原到适当位置(看需求)。

goUp: function(){ //获得焦点事件//原来单位为100vh,输入法弹出时100vh的计算方法跟原来的计算方法不一样,会导致页面变形this.$refs.main.$el.style.height = this.initialHeight + 'px';this.$refs.liveOnline.$el.style.height = this.initialHeight + 'px';	this.$refs.dialogbox.$el.style.bottom = this.initialHeight + 'px';//让input框处于高于输入法的位置,可以让页面不被输入法往上顶或压缩setTimeout(() => !this.isFlag && (this.$refs.dialogbox.$el.style.bottom = (this.keyHeight != 0 ? this.keyHeight : this.initialHeight/2) + 'px'),100);//同时让input框处于合适的位置,这个值需要获取到键盘的高度 ps:某些情况获取不到,算个大概}

我的需求是要将input处于软键盘的正上方,所以我需要获取到软键盘的高度。

第二步:安卓软键盘高度可以通过监听页面高度变化来获取
页面初始化的时页面高度为initialHeight = window.innerHeight,当input聚焦后,软键盘弹起页面高度为window.innerHeight,可得软键盘高度为keyHeight = initialHeight - window.innerHeight

这里有一个问题就是由于input输入框聚焦时执行的事件比页面发生高度变化执行的事件要先,所以第一次input输入框聚焦时keyHeight还未被赋予软键盘的高度 。

我想了一个解决办就是监听keyHeight的改变,当keyHeight改变时设置input的位置,并且设置了一个参数isFlag(初始值为true),来控制第一次input聚焦时不设置input的位置。

uni.onWindowResize((res) => {if(this.initialHeight != window.innerHeight && this.isFlag){this.keyHeight = this.initialHeight - window.innerHeight;this.isFlag = false;}
})keyHeight:function(value){this.$refs.dialogbox.$el.style.bottom = this.keyHeight + 'px'}

ps: ios端监听不到页面高度变化暂时没找到合适的方法来获取软键盘高度。虽然ios可以监听页面滚动,软键盘弹起页面发生滚动,获取页面滚动的距离就是软键盘的高度,再将页面滚动距离归为0,但是归为0时页面会出现白色的抖动。

遂放弃了这种方法,经与产品商议,ios端就让软键盘将页面顶起。

onPageScroll: function(Object) {//获取页面滚动的距离this.keyHeight = Object.scrollTop();//将页面滚动距离归为0uni.pageScrollTo({scrollTop:0,duration: 0})}

第三步:软键盘收起时页面还原
监听input失焦事件将将input位置还原、取消蒙层显示。
因为有的时候会出现软键盘收起页面上滑的页面未还原的bug,所以input失焦时将页面上滑距离归为0。

 goDown: function(){//失焦事件setTimeout(() => {//延时是为了处理点击发送按钮失焦的情况this.$refs.dialogbox.$el.style.bottom = 0;this.isDialogBoxUp = false;uni.pageScrollTo({scrollTop:0,duration: 0})},100)}

这篇关于uni,H5页面,解决软键盘弹起页面被挤压、被往顶的问题的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!


原文地址:
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.chinasem.cn/article/538800

相关文章

PyInstaller打包selenium-wire过程中常见问题和解决指南

《PyInstaller打包selenium-wire过程中常见问题和解决指南》常用的打包工具PyInstaller能将Python项目打包成单个可执行文件,但也会因为兼容性问题和路径管理而出现各种运... 目录前言1. 背景2. 可能遇到的问题概述3. PyInstaller 打包步骤及参数配置4. 依赖

resultMap如何处理复杂映射问题

《resultMap如何处理复杂映射问题》:本文主要介绍resultMap如何处理复杂映射问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录resultMap复杂映射问题Ⅰ 多对一查询:学生——老师Ⅱ 一对多查询:老师——学生总结resultMap复杂映射问题

解决SpringBoot启动报错:Failed to load property source from location 'classpath:/application.yml'

《解决SpringBoot启动报错:Failedtoloadpropertysourcefromlocationclasspath:/application.yml问题》这篇文章主要介绍... 目录在启动SpringBoot项目时报如下错误原因可能是1.yml中语法错误2.yml文件格式是GBK总结在启动S

java实现延迟/超时/定时问题

《java实现延迟/超时/定时问题》:本文主要介绍java实现延迟/超时/定时问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录Java实现延迟/超时/定时java 每间隔5秒执行一次,一共执行5次然后结束scheduleAtFixedRate 和 schedu

idea maven编译报错Java heap space的解决方法

《ideamaven编译报错Javaheapspace的解决方法》这篇文章主要为大家详细介绍了ideamaven编译报错Javaheapspace的相关解决方法,文中的示例代码讲解详细,感兴趣的... 目录1.增加 Maven 编译的堆内存2. 增加 IntelliJ IDEA 的堆内存3. 优化 Mave

如何解决mmcv无法安装或安装之后报错问题

《如何解决mmcv无法安装或安装之后报错问题》:本文主要介绍如何解决mmcv无法安装或安装之后报错问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录mmcv无法安装或安装之后报错问题1.当我们运行YOwww.chinasem.cnLO时遇到2.找到下图所示这里3.

浅谈配置MMCV环境,解决报错,版本不匹配问题

《浅谈配置MMCV环境,解决报错,版本不匹配问题》:本文主要介绍浅谈配置MMCV环境,解决报错,版本不匹配问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录配置MMCV环境,解决报错,版本不匹配错误示例正确示例总结配置MMCV环境,解决报错,版本不匹配在col

Vue3使用router,params传参为空问题

《Vue3使用router,params传参为空问题》:本文主要介绍Vue3使用router,params传参为空问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录vue3使用China编程router,params传参为空1.使用query方式传参2.使用 Histo

Feign Client超时时间设置不生效的解决方法

《FeignClient超时时间设置不生效的解决方法》这篇文章主要为大家详细介绍了FeignClient超时时间设置不生效的原因与解决方法,具有一定的的参考价值,希望对大家有一定的帮助... 在使用Feign Client时,可以通过两种方式来设置超时时间:1.针对整个Feign Client设置超时时间

SpringBoot首笔交易慢问题排查与优化方案

《SpringBoot首笔交易慢问题排查与优化方案》在我们的微服务项目中,遇到这样的问题:应用启动后,第一笔交易响应耗时高达4、5秒,而后续请求均能在毫秒级完成,这不仅触发监控告警,也极大影响了用户体... 目录问题背景排查步骤1. 日志分析2. 性能工具定位优化方案:提前预热各种资源1. Flowable