vant 软键盘_移动端页面输入底部被软键盘遮挡问题
概述
近期有个移动端页面的项目,存在需要用户输入的表单信息。因为页面不存在滑动(通过overflow设为hidden的方式),所以在点击input标签输入信息时,在安卓机下键盘会遮挡页面底部内容,当点击键盘时,焦点所在的 input标签才会显示在视区里。在IOS不存在此问题(在软键盘弹出时,页面会自动顶上去),存在滑动的页面里也不存在该问题。
目前的解决方案一览
通过 window.onresize 监听页面大小变化,然后通过 window.scrollTo 使页面滚动到所需位置
通过 Element.scrollIntoView()
通过 Element.scrollIntoViewIfNeeded()
window.scrollTo
没什么好解释的上代码
window.onresize = function () {
if (document.activeElement.tagName == "INPUT" || document.activeElement.tagName == "TEXTAREA") {
setTimeout(function () {
var top = document.activeElement.getBoundingClientRect().top;
window.scrollTo(0,top);
}, 0);
}
}
提一下,因为iphone不存在此问题,可以加一个限制条件在android以外的终端下不执行此端代码
var ua = navigator.userAgent;
var isAndroid = /android/i.test(ua); //android终端
if(!isAndroid) {
//执行代码.....
}
提个问题,如果这段代码放在放在 input 等输入标签内可以么?
经过个人测试不可以,大家有兴趣可以自行测试,如果有可以的机型可以拿出来探讨。
对这个问题我还想分析下,首先我的页面是不可滚动的,正常情况执行 window.scrollTo 是不会有作用的,但是当弹出软键盘时,页面由于被软键盘顶起,致使页面高度发生了变化,所以此时执行 window.scrollTo 页面会发生变化。但是,由于js触发事件,onresize 事件要在 click 事件之后,不是捕获和冒泡的问题哦。我尝试添加setTimeout,但是这个事件差不同的机型间会存在差异,如果设太长,就又失去了该解决方案的意义了,关于这个见仁见智吧。
关于此段,持续更新,欢迎交流学习
Element.scrollIntoView()
在MDN中有提到这个是一个实验功能,但他的支持度还是可以的,根据项目情况选择吧。
其作用就是让当前的元素滚动到浏览器窗口的可视区域内
使用方式如下
element.scrollIntoView(); // 等同于element.scrollIntoView(true)
element.scrollIntoView(alignToTop); // Boolean型参数
element.scrollIntoView(scrollIntoViewOptions); // Object型参数
参数分两种
alignToTop
一个Boolean值:
如果为true,元素的顶端将和其所在滚动区的可视区域的顶端对齐。
如果为true,元素的顶端将和其所在滚动区的可视区域的顶端对齐。
如果为false,元素的底端将和其所在滚动区的可视区域的底端对齐。
scrollIntoViewOptions
一个boolean或一个带有选项的object:
{
behavior: "auto" | "instant" | "smooth",
block: "start" | "end",
}
如果是一个boolean, true 相当于{block: "start"},false 相当于{block: "end"}
scrollIntoViewOptions 支持度很低, 不建议使用
Element.scrollIntoViewIfNeeded()
在MDN中有提到:
该特性是非标准的,请尽量不要在生产环境中使用它!
但他的支持度还是蛮高的的,根据项目情况选择吧。
用法类似与 Element.scrollIntoView() ,但它只有一个参数
opt_center
一个 Boolean 类型的值,默认为true:
如果为true,则元素将在其所在滚动区的可视区域中居中对其。
如果为false,则元素将与其所在滚动区的可视区域最近的边缘对齐。 根据可见区域最靠近元素的哪个边缘,元素的顶部将与可见区域的顶部边缘对准,或者元素的底部边缘将与可见区域的底部边缘对准。
vant 软键盘_移动端页面输入底部被软键盘遮挡问题相关推荐
- 怎么把一个控件放到tab页面上去?_移动端页面内容切换
# 移动端页面内容切换 上周做了一个和页面切换相关的需求,为了探寻在需求场景下最符合用户心理模型的交互方式,当时一共输出了有四五种方案.总结一下各种切换页面内容的方式的特点和他们适用的场景.## 一. ...
- java怎么编写软键盘_输入法编程教程---软键盘(小键盘?)类,C++编写
//这是以前写的输入法的小键盘(软键盘)类 //就是输入法输入特殊字符时用的那个小键盘 //比如搜狗输入法上的小键盘按钮按下之后,就会弹出一个小键盘 // //注意:这是多个文件合在一起了,下载打包好 ...
- 图上上传页面设计_无线端页面设计“三大雷区”
无线视觉规范 手机端页面的设计有许多的规范,大到涉及整个页面的排版呈现方式,小到一个icon的尺寸大小,这都关系到视觉页面的美观程度以及用户体验设计.所以应该积极主动去分析深入了解并研究出可行的解决方 ...
- ios键盘done中文_IOS_IOS关闭键盘的方法,首先输入完成后按键盘上的done - phpStudy...
IOS关闭键盘的方法 首先输入完成后按键盘上的done关闭键盘 首先在Interface Builder中选择TextFields,然后在Text Field Attributes中找到Text In ...
- macbook禁用键盘_如何禁用Macbook Pro的内置键盘
最近几个月我的机械键盘一直在吃灰,因为用回了自己2011款15寸古董MBP当工作机.机器内置键盘比13寸MBP的内置键盘宽一点,导致像原来一样把机械键盘放在上面的时候会压到一些按键. 搜了一些可以把内 ...
- 调用手机数字键盘,QQ浏览器兼容性(输入一个数字,键盘就会隐藏的问题)
调用手机数字键盘,仅需要加上type="number"即可,现在大部分手机浏览器使用这个方法都可以解决. 部分手机需要加上 pattern="[0-9]*" ...
- vant 软键盘_移动端软键盘监听(弹出,收起),及影响定位布局的问题
移动端软键盘监听(弹出,收起),及影响定位布局的问题 一:移动端软键盘监听(弹出,收起) 1.监听resize ( Android) var winHeight = $(window).height( ...
- 移动端h5唤起键盘_移动端H5界面打开后,如何自动调用软键盘
test(){ // let aa = this.$refs.input1.blur(); // this.$nextTick((x)=>{ //正确写法 // // this.$refs.in ...
- 移动端h5唤起键盘_移动端javascript拉起软键盘
先上图来镇楼 坑啊,知乎居然不支持gif,点这里看 一.文本输入 文本输入html元素 1.input标签,且type类型为text,number,search,tel,password,email, ...
最新文章
- java为什么序列化不一致_java – 为什么Jackson多态序列化在列表中不起作用?
- 云服务器 架设传奇_传奇手游-战神引擎架设教程
- 【机器学习】LBP特征融合最大灰度差、平均灰度、平均梯度改善SVM检测效果
- Interface classes
- 网易云信自研大规模传输网核心系统架构剖析
- java kaptcha_java相关:kaptcha验证码使用方法详解
- php改成IP连接数据库,thinkphp,pdo连接数据库,host自动被替换成了本机ip
- http协议--笔记
- #6682. 梦中的数论(Min25筛)
- vue项目 :npm命令安装jquery
- 《微处理器体系结构》1.1 汇编语言与机器语言及应用
- “3D 元宇宙技术”在汽车新零售领域的应用与实践
- 上云避坑指南100篇|ERP上云一时爽,遇坑泪两行
- 用户邀请码的生成方法
- 基于GLSL的聚光灯效果的绘制
- gpu运行pycharm
- 全球首款AI投屏智能硬件 爱奇艺电视果4K发布
- php empty
- iOS 10权限设置
- linux里添加网卡,Linux添加虚拟网卡的多种方法
热门文章
- Android实现自定义的 时间日期 控件
- 为Visual studio 2008 添加汇编工程模板
- 微信公众号 JSSDK 提示:invalid signature
- 深入分析 Javascript 单线程
- for-forEach-stream.forEach三种遍历方法
- jar包和war包区别及理解
- linux服务器文件索引inodes满了
- 两个比较好的java在线手册网站
- ELK学习9_ELK数据流传输过程_问题总结2
- 交换机端口灯闪烁频率一样_思创易控cetron-新品S2024GE 24口全千兆非网管交换机即将上市!...