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


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 相关文章推荐
JS input文本框禁用右键和复制粘贴功能的代码
Apr 15 Javascript
Three.js源码阅读笔记(光照部分)
Dec 27 Javascript
解决javascript:window.close()在chrome,Firefox下失效的问题
May 07 Javascript
JavaScript中的运算符种类及其规则介绍
Sep 26 Javascript
jquery实现Li滚动时滚动条自动添加样式的方法
Aug 10 Javascript
javascript实现方法调用与方法触发小结
Mar 26 Javascript
jQuery Mobile和HTML5开发App推广注册页
Nov 07 Javascript
纯js三维数组实现三级联动效果
Feb 07 Javascript
JavaScript 过滤关键字
Mar 20 Javascript
浅谈小程序 setData学问多
Feb 20 Javascript
Vue formData实现图片上传
Aug 20 Javascript
JS call()及apply()方法使用实例汇总
Jul 11 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与javascript的两种交互方式
2006/10/09 PHP
Laravel5.* 打印出执行的sql语句的方法
2017/07/24 PHP
基于jquery的网页SELECT下拉框美化代码
2010/10/28 Javascript
jQuery之end()和pushStack()使用介绍
2012/02/07 Javascript
JavaScript子窗口ModalDialog中操作父窗口对像
2012/12/11 Javascript
JS和函数式语言的三特性
2014/03/05 Javascript
JS获取网页属性包括宽、高等等
2014/04/03 Javascript
javascript包装对象实例分析
2015/03/27 Javascript
Vue.js 2.0 移动端拍照压缩图片预览及上传实例
2017/04/27 Javascript
详解React Native 采用Fetch方式发送跨域POST请求
2017/11/15 Javascript
vue axios整合使用全攻略
2018/05/24 Javascript
基于vue实现一个神奇的动态按钮效果
2019/05/15 Javascript
vue的滚动条插件实现代码
2019/09/07 Javascript
微信小程序之左右布局的实现代码
2019/12/13 Javascript
python实现保存网页到本地示例
2014/03/16 Python
python基础教程之Hello World!
2014/08/29 Python
Python实现的数据结构与算法之链表详解
2015/04/22 Python
Python使用cx_Freeze库生成msi格式安装文件的方法
2018/07/10 Python
python爬取指定微信公众号文章
2018/12/20 Python
python模拟鼠标点击和键盘输入的操作
2019/08/04 Python
python tkinter canvas使用实例
2019/11/04 Python
selenium中get_cookies()和add_cookie()的用法详解
2020/01/06 Python
Python 实现平台类游戏添加跳跃功能
2020/03/27 Python
python:HDF和CSV存储优劣对比分析
2020/06/08 Python
Tensorflow之MNIST CNN实现并保存、加载模型
2020/06/17 Python
django restframework serializer 增加自定义字段操作
2020/07/15 Python
pycharm中使用request和Pytest进行接口测试的方法
2020/07/31 Python
Python3+Django get/post请求实现教程详解
2021/02/16 Python
分享CSS3制作卡片式图片的方法
2016/07/08 HTML / CSS
iKRIX意大利网上商店:男女豪华服装和配件
2019/10/09 全球购物
汽车专业学生自我评价
2014/01/19 职场文书
2014年初级职称工作总结
2014/12/08 职场文书
车间安全生产管理制度
2015/08/06 职场文书
JS一分钟在github+Jekyll的博客中添加访问量功能的实现
2021/04/03 Javascript
python 破解加密zip文件的密码
2021/04/22 Python
Python探索生命起源 matplotlib细胞自动机动画演示
2022/04/21 Python