IOS11下fixed中input光标错位问题
项目遇到了这个问题,故作了个临时解决方案,暂时没有想到更好的方法,查阅了网上的方案,也没有找到完美的解决方案。
方案思路:
①弹窗打开时,阻止 body 滚动,禁用 touchmove ,同时记录当前 body 的滚动高度 startScrollTop
②弹窗关闭时,恢复 body 滚动,同时给当前滚动条赋值 startScrollTop ,恢复到弹窗前的高度
③关闭输入键盘时,同样恢复到弹窗前的高度
实现的代码如下:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>ios11光标错位问题</title>
<meta name="viewport" content="initial-scale=1, maximum-scale=1, minimum-scale=1, user-scalable=no">
<script src="http://g.tbcdn.cn/mtb/lib-flexible/0.3.4/??flexible_css.js,flexible.js"></script>
<style type="text/css">
.wrap{
height: 4000px;
}
button{
margin-bottom: 1000px;
display: block;
}
.fixed{
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
display: flex;
justify-content: center;
align-items: center;
z-index: 2;
box-sizing: border-box;
background: rgba(0,0,0,0.2);
}
.mask{
position: fixed;
top: 0;
left: 0;
width: 100%;
height: 100%;
background: rgba(255,0,0, 0.1);
z-index: 1;
}
input{
padding: 10px;
}
.abs{
width: 200px;
padding: 10px;
position: absolute;
z-index: 99;
border: 3px solid #000;
background: #fff;
}
</style>
</head>
<body>
<h2>顶部</h2>
<div class="wrap">
<button type="button" name="button" onclick="showDialog()">show dialog</button>
<button type="button" name="button" onclick="showDialog()">show dialog</button>
<button type="button" name="button" onclick="showDialog()">show dialog</button>
</div>
<div class="fixed" id="dialog" style="display: none;">
<div class="mask" onclick="hideDialog()"></div>
<div class="abs">
<div><input type="text" onfocus="getDialogScrollTop()" onblur="setDialogScrollTop()" name="" value=""></div>
<div><input type="text" onfocus="getDialogScrollTop()" onblur="setDialogScrollTop()" name="" value=""></div>
<div><input type="text" onfocus="getDialogScrollTop()" onblur="setDialogScrollTop()" name="" value=""></div>
</div>
</div>
<h2>底部</h2>
<script>
var startScrollTop = 0; function showDialog() {
document.getElementById('dialog').style.display = "flex";
disabledScroll()
getDialogScrollTop();
setDialogScrollTop();
} function hideDialog() {
document.getElementById('dialog').style.display = "none";
enabledScroll()
} // 取消默认事件
function stopPreventDefault(e) {
e.preventDefault();
e.stopPropagation();
} // 添加 touchmove 事件 禁用滚动条滚动
function disabledScroll() {
document.addEventListener("touchmove", stopPreventDefault, false);
} // 取消 touchmove 事件 还原滚动条滚动,同时还原小键盘打开前的滚动高度
function enabledScroll() {
document.removeEventListener("touchmove", stopPreventDefault);
setTimeout(setDialogScrollTop, 200)
} // 获取当前滚动高度并赋值到 startScrollTop
function getDialogScrollTop() {
startScrollTop = document.body.scrollTop;
} // 还原滚动高度
function setDialogScrollTop() {
document.querySelectorAll('.fixed').forEach(function(ths) {
ths.style.top = startScrollTop + 'px';
});
document.body.scrollTop = startScrollTop
}
</script>
</body>
</html>
IOS11下fixed中input光标错位问题的更多相关文章
- 苹果手机iOS11中fixed弹出框中input光标错位问题
最近遇到了一个移动前端的BUG:手机弹出框中的输入框focus时光标可能会错位. 刚开始时我完全不知道错误原因是什么,在电脑上调试时完全没有问题,手机上出现问题时也没有找到规律.后来在网上搜索了大量的 ...
- IOS中input光标跑偏问题的解决方法
ios端兼容input光标高度处理 在最近的项目中遇到一个问题,input输入框光标,在安卓手机上显示没有问题,但是在苹果手机上 当点击输入的时候,光标的高度和父盒子的高度一样.造成的原因就是给父盒子 ...
- ie中input光标问题
为input 添加 readonly=”readonly” UNSELECTABLE="on" 属性. IE中设置了readonly=”readonly”,点击使用日期选择器 ...
- input光标错位
文档结构 <div class="noteWrap"> <input type="text" placeholder="写留言&qu ...
- 解决IE下readonly的Input光标选中的问题
首先用unselectable="on"解决,但是这种方法bug太多, 屏蔽了input的onblur事件(也就是focus事件在Angualr下),所以只能用click事件来代替 ...
- input 光标在 chrome下不兼容 解决方案
input 光标在 chrome下不兼容 解决方案 height: 52px; line-height: normal; line-height:52px\9 .list li input[type= ...
- 在IOS11中position:fixed弹出框中的input出现光标错位的问题
问题出现的背景: 在IOS11中position:fixed弹出框中的input出现光标错位的问题 解决方案 一.设计交互方面最好不要让弹窗中出现input输入框: 二.前端处理此兼容性的方案思路: ...
- ios11,弹出层内的input框光标错位 键盘弹出时,输入信息,光标一直乱跳
之前开发了一个微信项目,维护期中苹果手机突然出现光标错位现象,经过排查,发现是最新的ios11系统的锅. 具体情况:弹出层使用position: fixed:弹出层内附带input/textare ...
- elementUi中input输入字符光标在输入一个字符后,光标失去焦点
elementUi中input输入字符光标在输入一个字符后,光标就退出,无法输入需要再次聚焦然后输入一个字符又再次退出 首先,用elementUi正常用v-model绑定输入的值是不会造成光标退出的, ...
随机推荐
- Jquery detect page refresh
first thing there are 3 functions we will use: function setCookie(c_name, value, exdays) { ...
- neo4j 常用命令查询,以及更新 节点 的 label 名 和 property 名
常用命令查询 https://neo4j.com/docs/cypher-refcard/current/ 更新节点的 labels 有时候 发现节点的 label 名字起错了怎么修改呢?!一个节点是 ...
- oracle老是出现监听错误
解决方法之一: 点击开始-->选择程序--->选中你安装的oracle版本-->选中配置与移植工具-->选中Net Configuration Assistant-->在 ...
- gff/gtf格式
1)gff3及gtf2简介 一个物种的基因组测序完成后,需要对这些数据进行解读,首先要先找到这些序列中转录起始位点.基因.外显子.内含子等组成元件在染色体中的位置信息(即注释)后才能再进行深入的分析. ...
- 几个小模板:topology, dijkstra, spfa, floyd, kruskal, prim
1.topology: #include <fstream> #include <iostream> #include <algorithm> #include & ...
- subprocess 粘包问题
1.执行命令: 在py代码中去如何调用操作系统的命令 新模块:subprocess r = subprocess.Popen('ls',shell=True,stdout=subprocess.PIP ...
- phpStudy5——php导入其他php文件(php文件的引入)
前言: 通过前边几个例子,相信大家都会有一个疑惑了,就是每个请求数据库的php页面,都要写一次连接数据库的代码,这个肯定是有违代码复用原则的.那么怎么解决这个问题呢? 在php中可以通过include ...
- 各种replace待续
http://blog.163.com/chenjie_8392/blog/static/439339842010513128139/
- OC 线程操作3 - NSOperation
#import "ViewController.h" @interface ViewController () @end @implementation ViewControlle ...
- php使用数组语法访问对象
有一个对象,不过希望能用数组的语法来读写数据,可以使用 实现SPL的ArrayAccess接口来解决. 使用场景:加载配置文件类.larvel框架加载配置文件就这利用数组来操作对象. 数组式访问Obj ...