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


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 getElementsByClassName函数
Apr 01 Javascript
网页打开自动最大化的js代码
Aug 22 Javascript
JavaScript italics方法入门实例(把字符串显示为斜体)
Oct 17 Javascript
JavaScript中实现无缝滚动、分享到侧边栏实例代码
Apr 06 Javascript
AJAX实现瀑布流触发分页与分页触发瀑布流的方法
May 23 Javascript
Bootstrap 响应式实用工具实例详解
Mar 29 Javascript
对Vue2 自定义全局指令Vue.directive和指令的生命周期介绍
Aug 30 Javascript
vue实现弹框遮罩点击其他区域弹框关闭及v-if与v-show的区别介绍
Sep 29 Javascript
mpvue开发音频类小程序踩坑和建议详解
Mar 12 Javascript
微信小程序实现页面跳转传递参数(实体,对象)
Aug 12 Javascript
vue日历/日程提醒/html5本地缓存功能
Sep 02 Javascript
一篇超完整的Vue新手入门指导教程
Nov 18 Vue.js
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
总集篇&特番节目先行播出!《SAO Alicization War of Underworld》第2季度TV动画4月25日放送!
2020/03/06 日漫
PHP 进程锁定问题分析研究
2009/11/24 PHP
第六章 php目录与文件操作
2011/12/30 PHP
PHP写的加密函数,支持私人密钥(详细介绍)
2013/06/09 PHP
php遍历目录输出目录及其下的所有文件示例
2014/01/27 PHP
ThinkPHP缓存方法S()概述
2014/06/13 PHP
javascript编程起步(第三课)
2007/02/27 Javascript
JavaScript的parseInt 进制问题
2009/05/07 Javascript
Mootools 1.2教程 正则表达式
2009/09/15 Javascript
JSON 学习之JSON in JavaScript详细使用说明
2010/02/23 Javascript
(jQuery,mootools,dojo)使用适合自己的编程别名命名
2010/09/14 Javascript
jQuery 回车事件enter使用示例
2014/02/18 Javascript
jQuery的cookie插件实现保存用户登陆信息
2014/04/15 Javascript
JS实现仿QQ效果的三级竖向菜单
2015/09/25 Javascript
JS中正则表达式全局匹配模式 /g用法详解
2017/04/01 Javascript
vue-router 路由基础的详解
2017/10/17 Javascript
jQuery基于Ajax实现读取XML数据功能示例
2018/05/31 jQuery
AngularJS实现与后台服务器进行交互的示例讲解
2018/08/13 Javascript
微信小程序+腾讯地图开发实现路径规划绘制
2019/05/22 Javascript
NProgress显示顶部进度条效果及使用详解
2019/09/21 Javascript
安装多版本Vue-CLI的实现方法
2020/03/24 Javascript
vue-cli4项目开启eslint保存时自动格式问题
2020/07/13 Javascript
React倒计时功能实现代码——解耦通用
2020/09/18 Javascript
基于js实现的图片拖拽排序源码实例
2020/11/04 Javascript
Python中用Ctrl+C终止多线程程序的问题解决
2013/03/30 Python
python spyder中读取txt为图片的方法
2018/04/27 Python
python GUI库图形界面开发之PyQt5 MDI(多文档窗口)QMidArea详细使用方法与实例
2020/03/05 Python
python with语句的原理与用法详解
2020/03/30 Python
外企测试工程师面试题
2015/02/01 面试题
化学学院毕业生自荐信范文
2013/12/17 职场文书
大学生求职计划书
2014/04/30 职场文书
商业计算机应用专业自荐书
2014/06/09 职场文书
体育专业求职信
2014/07/16 职场文书
学校四风问题对照检查材料思想汇报
2014/09/26 职场文书
关于CentOS 8 搭建MongoDB4.4分片集群的问题
2021/10/24 MongoDB