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


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 相关文章推荐
用javascript控制iframe滚动的代码
Apr 10 Javascript
extjs grid取到数据而不显示的解决
Dec 29 Javascript
基于jquery的15款幻灯片插件
Apr 10 Javascript
用Js实现的动态增加表格示例自己写的
Oct 21 Javascript
jQuery中wrapInner()方法用法实例
Jan 16 Javascript
基于Jquery和CSS3制作数字时钟附源码下载(CSS3篇)
Nov 24 Javascript
创建一个类Person的简单实例
May 17 Javascript
深入理解事件冒泡(Bubble)和事件捕捉(capture)
May 28 Javascript
最全面的JS倒计时代码
Sep 17 Javascript
新手必须知的Node.js 4个JavaScript基本概念
Sep 16 Javascript
vue解决一个方法同时发送多个请求的问题
Sep 25 Javascript
微信小程序实现两边小中间大的轮播效果的示例代码
Dec 07 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
PHP5中GD库生成图形验证码(有汉字)
2013/07/28 PHP
改写ThinkPHP的U方法使其路由下分页正常
2014/07/02 PHP
PHP学习笔记(三):数据类型转换与常量介绍
2015/04/17 PHP
thinkphp3.x中display方法及show方法的用法实例
2016/05/19 PHP
Yii2使用$this-&gt;context获取当前的Module、Controller(控制器)、Action等
2017/03/29 PHP
laravel如何开启跨域功能示例详解
2017/08/31 PHP
PHP获取日期对应星期、一周日期、星期开始与结束日期的方法
2018/06/22 PHP
PHP的cookie与session原理及用法详解
2019/09/27 PHP
推荐dojo学习笔记
2007/03/24 Javascript
Javascript实现关联数据(Linked Data)查询及注意细节
2013/02/22 Javascript
Function.prototype.bind用法示例
2013/09/16 Javascript
jquery中checkbox使用方法简单实例演示
2015/11/24 Javascript
js实现目录链接,内容跟着目录滚动显示的简单实例
2016/10/15 Javascript
原生javascript上传图片带进度条【实例分享】
2017/04/06 Javascript
vue.js中v-on:textInput无法执行事件问题的解决过程
2017/07/12 Javascript
记一次webpack3升级webpack4的踩坑经历
2018/06/12 Javascript
一篇文章介绍redux、react-redux、redux-saga总结
2019/05/23 Javascript
vue移动端使用appClound拉起支付宝支付的实现方法
2019/11/21 Javascript
微信小程序利用for循环解决内容变更问题
2020/03/05 Javascript
Python Web框架Flask下网站开发入门实例
2015/02/08 Python
举例简单讲解Python中的数据存储模块shelve的用法
2016/03/03 Python
Python pymongo模块用法示例
2018/03/31 Python
Python递归函数实例讲解
2019/02/27 Python
2019 Python最新面试题及答案16道题
2019/04/11 Python
Python列表删除元素del、pop()和remove()的区别小结
2019/09/11 Python
python实现翻译word表格小程序
2020/02/27 Python
VSCode配合pipenv搞定虚拟环境的实现方法
2020/05/17 Python
纯css3制作的火影忍者写轮眼开眼至轮回眼及进化过程实例
2014/11/11 HTML / CSS
AE美国鹰日本官方网站: American Eagle Outfitters
2016/12/10 全球购物
Scholastic父母商店:儿童书籍
2017/01/01 全球购物
JavaScript实现页面动态验证码的实现示例
2021/03/23 Javascript
办公自动化专业大学生职业规划书
2014/03/06 职场文书
银行内勤岗位职责
2014/04/09 职场文书
幼儿园园长工作总结2015
2015/05/25 职场文书
《我的伯父鲁迅先生》教学反思
2016/02/16 职场文书
Python中基础数据类型 set集合知识点总结
2021/08/02 Python