[英]Prevent iOS from handling focus event on an <input>
鉴于 iOS 通过滚动/中断position: fixed
来响应<input type='text'>
,有没有办法阻止 iOS/Safari 接收该事件? 我已经尝试了无数解决此错误的方法,但没有一个适合我们的用例。 我确实需要输入才能获得:focus
伪类,并且在聚焦时调用blur
并不能完全解决问题,但任何其他建议将不胜感激!
对于某些背景,我们有一个自定义键盘,我们可以在其中隐藏 iPad 键盘(在输入上使用属性readonly
),并且键盘固定在屏幕底部。 除了页面高度大于 iPad 屏幕高度时,它工作得很好,如果有人点击输入,我们的自定义键盘会跳到页面底部看不到的地方。 我目前有一个解决方法,我们可以切换到position: absolute
,但是我们有很多页面,这并不理想/容易出现错误,必须计算自定义键盘的位置,因此它似乎位于 iPad 的底部每次屏幕。 注意我不需要这个解决方案在 iPhone/Android 上工作。
这是一个相当大的黑客,但它似乎有效:
body, html {
margin: 0;
overflow: auto;
height: 100%;
-webkit-overflow-scrolling: touch;
}
只需将其添加到您的 CSS 中即可。 我需要删除边距,不确定这是否会影响您的设计。 如果是这样,您可能会尝试添加填充,但我还没有尝试过。
这个想法是为了防止 html 元素滚动,欺骗 Safari,因为它似乎只是试图在最外面的元素中做到这一点。
如果 html 不滚动,我需要添加回滚,所以我将它应用到正文。 这使滚动失去动力,并将其添加回来,您需要-webkit-overflow-scrolling: touch
东西。
所以,为了更清楚发生了什么,代码应该是这样的——但我还没有尝试过:
html {
margin: 0;
overflow: hidden;
height: 100%
}
body {
margin: 0;
overflow: auto;
height: 100%;
-webkit-overflow-scrolling: touch;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.