完美解决手机网页中输入框被输入法遮挡的问题


Posted in Javascript onDecember 19, 2017

之前要做一个弹出对话框,填写信息,发现在手机上看的时候,较后的输入框在填写信息时,输入框被输入法遮挡,只能盲填。

前提

1.弹出的对话框用display:fixed定位的

2.对话框大小固定

解决办法

css部分

(dlg-top与dlg-bottom为对话框的类,用于确定对话框的定位方式)

.dlg-top{
 position: fixed;
 top:100px;
 left:10%;
}
.dlg-bottom{
 position: fixed;
 bottom:0px;
 left:10%;
}

js部分

“deliver-dlg”为对话框的类

//弹出对话框时,绑定的事件
//绑定输入框获取焦点事件
$(".deliver-dlg input,.deliver-dlg textarea").focus(function(){
 var input=$(this);
 //在输入框获取焦点后,窗口改变的话,执行事件
 $(window).resize(function(){
  //判断当前输入框是否在可视窗口之外(下面)
  if($(window).height()-(input.offset().top+input.offset().height-document.body.scrollTop)<0){
   //对话框定位方式改为bottom
   $(".deliver-dlg").removeClass("dlg-top").addClass("dlg-bottom");
  }
  else{
   $(".deliver-dlg").removeClass("dlg-bottom").addClass("dlg-top");
  }
 });
});
//取消对话框时,取消事件绑定
$(".deliver-dlg input").unbind();
$(".deliver-dlg").removeClass("dlg-bottom").addClass("dlg-top");
$(window).unbind();

思路解析

简单点说就是改变对话框的定位方式,在默认情况下用top,在有输入法的时候,根据情况用bottom。 在input获取焦点且窗口重设的时候(即输入框弹出),注意先绑定input的focus事件,再绑定窗口改变的事件,因为在手机上,是input获取焦点,输入框才弹出导致窗口大小改变。

再窗口大小改变事件发生之后,判断输入框是否被遮(即不在窗口的可视范围内),采用的办法是用可视窗口的高度($(window).height())是否大于输入框的底部(input.offset().top+input.offset().height-document.body.scrollTop)因为input.offset().top表示的是元素离文档头部的位置,要算元素离可视窗口头部的位置,可以再减去滚动条滚动了多少。以上是判断元素是否在可视窗口底部。

以上这篇完美解决手机网页中输入框被输入法遮挡的问题就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
懒就要懒到底——鼠标自动点击(含时间判断)
Feb 20 Javascript
JavaScript监测ActiveX控件是否已经安装过的代码
Sep 02 Javascript
JavaScript Title、alt提示(Tips)实现源码解读
Dec 12 Javascript
{}与function(){}选用空对象{}来存放keyValue
May 23 Javascript
jquery入门—编写一个导航条(可伸缩)
Jan 07 Javascript
异步安全加载javascript文件的方法
Jul 21 Javascript
基于Vue实现timepicker
Apr 25 Javascript
微信小程序异步处理详解
Nov 10 Javascript
浅谈如何通过node.js对数据进行MD5加密
May 16 Javascript
JavaScript fetch接口案例解析
Aug 30 Javascript
vue动态配置模板 'component is'代码
Jul 04 Javascript
简单聊聊TypeScript只读修饰符
Apr 06 Javascript
js解决软键盘遮挡输入框的问题分享
Dec 19 #Javascript
Angular2实现组件交互的方法分析
Dec 19 #Javascript
JS+WCF实现进度条实时监测数据加载量的方法详解
Dec 19 #Javascript
jquery自定义显示消息数量
Dec 19 #jQuery
基于Vue开发数字输入框组件
Dec 19 #Javascript
jquery实现侧边栏左右伸缩效果的示例
Dec 19 #jQuery
从setTimeout看js函数执行过程
Dec 19 #Javascript
You might like
PHP3 safe_mode 失效漏洞
2006/10/09 PHP
PHP 文件上传源码分析(RFC1867)
2009/10/30 PHP
浅谈PHP array_search 和 in_array 函数效率问题
2019/10/15 PHP
thinkphp5 框架结合plupload实现图片批量上传功能示例
2020/04/04 PHP
Javascript 继承实现例子
2009/08/12 Javascript
jquery iframe操作详细解析
2013/11/20 Javascript
javascript生成大小写字母
2015/07/03 Javascript
Kindeditor在线文本编辑器如何过滤HTML
2016/04/14 Javascript
JS 循环li添加点击事件 (闭包的应用)
2016/12/10 Javascript
JS实现拖拽的方法分析
2016/12/20 Javascript
微信小程序 image组件binderror使用例子与js中的onerror区别
2017/02/15 Javascript
JavaScript的数据类型转换原则(干货)
2018/03/15 Javascript
vue axios封装及API统一管理的方法
2019/04/18 Javascript
Ant Design Vue 添加区分中英文的长度校验功能
2020/01/21 Javascript
jQuery实现异步上传一个或多个文件
2020/08/17 jQuery
js实现网页随机验证码
2020/10/19 Javascript
[05:04]完美世界携手游戏风云打造 卡尔工作室地图界面篇
2013/04/23 DOTA
[01:39](回顾)各路豪强针锋相对,几经鏖战四强产生
2014/07/01 DOTA
[04:16]完美世界DOTA2联赛PWL S2 集锦第一期
2020/11/23 DOTA
Django中实现点击图片链接强制直接下载的方法
2015/05/14 Python
Python编程之event对象的用法实例分析
2017/03/23 Python
python3.4爬虫demo
2019/01/22 Python
Python 抓取微信公众号账号信息的方法
2019/06/14 Python
python GUI库图形界面开发之pyinstaller打包python程序为exe安装文件
2020/02/26 Python
PyTorch中的C++扩展实现
2020/04/02 Python
matplotlib设置颜色、标记、线条,让你的图像更加丰富(推荐)
2020/09/25 Python
python中pivot()函数基础知识点
2021/01/03 Python
CSS3中Transition动画属性用法详解
2016/07/04 HTML / CSS
CSS3田字格列表的样式编写方法
2018/11/22 HTML / CSS
Ruby如何创建一个线程
2013/03/10 面试题
绩效工资分配方案
2014/01/18 职场文书
先进德育工作者事迹材料
2014/01/24 职场文书
护士毕业生自荐信
2014/02/07 职场文书
校园活动策划方案
2014/06/13 职场文书
2015年基层党建工作总结
2015/05/14 职场文书
USB TYPE-C 或将成为所有智能手机充电标准
2022/04/21 数码科技