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


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 相关文章推荐
jQuery EasyUI API 中文文档 - Pagination分页
Sep 29 Javascript
高效的jquery数字滚动特效
Dec 17 Javascript
浏览器环境下JavaScript脚本加载与执行探析之defer与async特性
Jan 14 Javascript
详解Javascript模板引擎mustache.js
Jan 20 Javascript
全面了解JavaScript的数据类型转换
Jul 01 Javascript
jquery ajax后台返回list,前台用jquery遍历list的实现
Oct 30 Javascript
canvas实现图像截取功能
Feb 06 Javascript
Vue中使用vue-i18插件实现多语言切换功能
Apr 25 Javascript
ES6与CommonJS中的模块处理的区别
Jun 13 Javascript
angular ng-model 无法获取值的处理方法
Oct 02 Javascript
微信小程序实现笑脸评分功能
Nov 03 Javascript
C#程序员入门学习微信小程序的笔记
Mar 05 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
php中用文本文件做数据库的实现方法
2008/03/27 PHP
php简单实现多语言切换的方法
2016/05/09 PHP
PHP预定义接口――Iterator用法示例
2020/06/05 PHP
InnerHtml和InnerText的区别分析
2009/03/13 Javascript
jQuery UI Dialog 创建友好的弹出对话框实现代码
2012/04/12 Javascript
jquery中的事件处理详细介绍
2013/06/24 Javascript
jQuery DOM操作实例
2014/03/05 Javascript
实现placeholder效果的方案汇总
2015/06/11 Javascript
Jquery组件easyUi实现表单验证示例
2016/08/23 Javascript
JavaWeb表单及时验证功能在输入后立即验证(含用户类型,性别,爱好...的验证)
2017/06/09 Javascript
Javascript别踩白块儿(钢琴块儿)小游戏实现代码
2017/07/20 Javascript
JS实现十字坐标跟随鼠标效果
2017/12/25 Javascript
微信小程序如何获取用户手机号
2018/01/26 Javascript
vue2.0在没有dev-server.js下的本地数据配置方法
2018/02/23 Javascript
vue.js 获取select中的value实例
2018/03/01 Javascript
如何使用proxy实现一个简单完整的MVVM库的示例代码
2019/09/17 Javascript
Vue 构造选项 - 进阶使用说明
2020/08/14 Javascript
纯js+css实现在线时钟
2020/08/18 Javascript
Python socket编程实例详解
2015/05/27 Python
Python中字典的基础知识归纳小结
2015/08/19 Python
python中获得当前目录和上级目录的实现方法
2017/10/12 Python
使用PyInstaller将python转成可执行文件exe笔记
2018/05/26 Python
python中cPickle类使用方法详解
2018/08/27 Python
Python 获取ftp服务器文件时间的方法
2019/07/02 Python
Python 下载及安装详细步骤
2019/11/04 Python
Grid 宫格常用布局的实现
2020/01/10 HTML / CSS
受外贸欢迎的美国主机:BlueHost
2017/05/16 全球购物
澳大利亚当地社区首选的光学商店:1001 Optical
2019/08/24 全球购物
.NET初级开发工程师面试题(包括Javascript)
2012/08/22 面试题
汽车专业毕业生推荐信
2013/11/12 职场文书
防灾减灾宣传标语
2014/10/07 职场文书
2015年公司保安年终工作总结
2015/05/14 职场文书
Redis数据结构之链表与字典的使用
2021/05/11 Redis
python实现语音常用度量方法的代码详解
2021/05/25 Python
详解Spring Boot使用系统参数表提升系统的灵活性
2021/06/30 Java/Android
Arthas排查Kubernetes中应用频繁挂掉重启异常
2022/02/28 MySQL