概述

近期有个移动端页面的项目,存在需要用户输入的表单信息。因为页面不存在滑动(通过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 软键盘_移动端页面输入底部被软键盘遮挡问题相关推荐

  1. 怎么把一个控件放到tab页面上去?_移动端页面内容切换

    # 移动端页面内容切换 上周做了一个和页面切换相关的需求,为了探寻在需求场景下最符合用户心理模型的交互方式,当时一共输出了有四五种方案.总结一下各种切换页面内容的方式的特点和他们适用的场景.## 一. ...

  2. java怎么编写软键盘_输入法编程教程---软键盘(小键盘?)类,C++编写

    //这是以前写的输入法的小键盘(软键盘)类 //就是输入法输入特殊字符时用的那个小键盘 //比如搜狗输入法上的小键盘按钮按下之后,就会弹出一个小键盘 // //注意:这是多个文件合在一起了,下载打包好 ...

  3. 图上上传页面设计_无线端页面设计“三大雷区”

    无线视觉规范 手机端页面的设计有许多的规范,大到涉及整个页面的排版呈现方式,小到一个icon的尺寸大小,这都关系到视觉页面的美观程度以及用户体验设计.所以应该积极主动去分析深入了解并研究出可行的解决方 ...

  4. ios键盘done中文_IOS_IOS关闭键盘的方法,首先输入完成后按键盘上的done - phpStudy...

    IOS关闭键盘的方法 首先输入完成后按键盘上的done关闭键盘 首先在Interface Builder中选择TextFields,然后在Text Field Attributes中找到Text In ...

  5. macbook禁用键盘_如何禁用Macbook Pro的内置键盘

    最近几个月我的机械键盘一直在吃灰,因为用回了自己2011款15寸古董MBP当工作机.机器内置键盘比13寸MBP的内置键盘宽一点,导致像原来一样把机械键盘放在上面的时候会压到一些按键. 搜了一些可以把内 ...

  6. 调用手机数字键盘,QQ浏览器兼容性(输入一个数字,键盘就会隐藏的问题)

    调用手机数字键盘,仅需要加上type="number"即可,现在大部分手机浏览器使用这个方法都可以解决. 部分手机需要加上 pattern="[0-9]*"  ...

  7. vant 软键盘_移动端软键盘监听(弹出,收起),及影响定位布局的问题

    移动端软键盘监听(弹出,收起),及影响定位布局的问题 一:移动端软键盘监听(弹出,收起) 1.监听resize ( Android) var winHeight = $(window).height( ...

  8. 移动端h5唤起键盘_移动端H5界面打开后,如何自动调用软键盘

    test(){ // let aa = this.$refs.input1.blur(); // this.$nextTick((x)=>{ //正确写法 // // this.$refs.in ...

  9. 移动端h5唤起键盘_移动端javascript拉起软键盘

    先上图来镇楼 坑啊,知乎居然不支持gif,点这里看 一.文本输入 文本输入html元素 1.input标签,且type类型为text,number,search,tel,password,email, ...

最新文章

  1. java为什么序列化不一致_java – 为什么Jackson多态序列化在列表中不起作用?
  2. 云服务器 架设传奇_传奇手游-战神引擎架设教程
  3. 【机器学习】LBP特征融合最大灰度差、平均灰度、平均梯度改善SVM检测效果
  4. Interface classes
  5. 网易云信自研大规模传输网核心系统架构剖析
  6. java kaptcha_java相关:kaptcha验证码使用方法详解
  7. php改成IP连接数据库,thinkphp,pdo连接数据库,host自动被替换成了本机ip
  8. http协议--笔记
  9. #6682. 梦中的数论(Min25筛)
  10. vue项目 :npm命令安装jquery
  11. 《微处理器体系结构》1.1 汇编语言与机器语言及应用
  12. “3D 元宇宙技术”在汽车新零售领域的应用与实践
  13. 上云避坑指南100篇|ERP上云一时爽,遇坑泪两行
  14. 用户邀请码的生成方法
  15. 基于GLSL的聚光灯效果的绘制
  16. gpu运行pycharm
  17. 全球首款AI投屏智能硬件 爱奇艺电视果4K发布
  18. php empty
  19. iOS 10权限设置
  20. linux里添加网卡,Linux添加虚拟网卡的多种方法

热门文章

  1. Android实现自定义的 时间日期 控件
  2. 为Visual studio 2008 添加汇编工程模板
  3. 微信公众号 JSSDK 提示:invalid signature
  4. 深入分析 Javascript 单线程
  5. for-forEach-stream.forEach三种遍历方法
  6. jar包和war包区别及理解
  7. linux服务器文件索引inodes满了
  8. 两个比较好的java在线手册网站
  9. ELK学习9_ELK数据流传输过程_问题总结2
  10. 交换机端口灯闪烁频率一样_思创易控cetron-新品S2024GE 24口全千兆非网管交换机即将上市!...