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


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 13 Javascript
jQuery实现数秒后自动提交form的方法
Mar 05 Javascript
基于Jquery代码实现支持PC端手机端幻灯片代码
Nov 17 Javascript
分分钟玩转Vue.js组件
Oct 25 Javascript
JS中with的替代方法与String中的正则方法详解
Dec 23 Javascript
Vue数据驱动模拟实现3
Jan 11 Javascript
JS基于面向对象实现的多个倒计时器功能示例
Feb 28 Javascript
vue.js路由跳转详解
Aug 28 Javascript
angular5 httpclient的示例实战
Mar 12 Javascript
使用Vue开发动态刷新Echarts组件的教程详解
Mar 22 Javascript
webpack3里使用uglifyjs压缩js时打包报错的解决
Dec 13 Javascript
js实现表单项的全选、反选及删除操作示例
Jun 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
Zend Studio去除编辑器的语法警告设置方法
2012/10/24 PHP
利用PHP实现图片等比例放大和缩小的方法详解
2013/06/06 PHP
PHP Cookie学习笔记
2016/08/23 PHP
PHP基于PDO扩展操作mysql数据库示例
2018/12/24 PHP
Js如何判断客户端是PC还是手持设备简单分析
2012/11/22 Javascript
js控制table合并具体实现
2014/02/20 Javascript
jQuery中not()方法用法实例
2015/01/06 Javascript
13个PHP函数超实用
2015/10/21 Javascript
jquery validate.js表单验证入门实例(附源码)
2015/11/10 Javascript
vue组件中点击按钮后修改输入框的状态实例代码
2017/04/14 Javascript
docker中编译nodejs并使用nginx启动
2017/06/23 NodeJs
手机注册发送验证码倒计时的简单实例
2017/11/15 Javascript
实战node静态文件服务器的示例代码
2018/03/08 Javascript
对TypeScript库进行单元测试的方法
2019/07/18 Javascript
vue-列表下详情的展开与折叠案例
2020/07/28 Javascript
js 实现碰撞检测的示例
2020/10/28 Javascript
[47:48]DOTA2上海特级锦标赛D组小组赛#2 Liquid VS VP第三局
2016/02/28 DOTA
python数字图像处理之骨架提取与分水岭算法
2018/04/27 Python
解决Django中多条件查询的问题
2019/07/18 Python
python实现输出一个序列的所有子序列示例
2019/11/18 Python
python 生成正态分布数据,并绘图和解析
2020/12/21 Python
美国网上鞋子零售商:Dr. Scholl’s Shoes
2017/11/17 全球购物
无畏的旅行:Intrepid Travel
2017/12/20 全球购物
个人欠款担保书
2014/05/20 职场文书
计算机售后服务承诺书
2014/05/30 职场文书
新闻编辑专业自荐信
2014/07/02 职场文书
环境卫生倡议书
2014/08/29 职场文书
2014年重阳节老干部座谈会上的讲话稿
2014/09/25 职场文书
领导班子个人对照检查材料(群众路线)
2014/09/26 职场文书
采购员岗位职责范本
2015/04/07 职场文书
2016元旦晚会主持词
2015/07/01 职场文书
2019消防宣传标语!
2019/07/10 职场文书
原生JavaScript实现简单五子棋游戏
2021/06/28 Javascript
MySQL索引是啥?不懂就问
2021/07/21 MySQL
springboot 启动如何排除某些bean的注入
2021/08/02 Java/Android
Java中try catch处理异常示例
2021/12/06 Java/Android