繁体   English   中英

阻止 iOS 处理焦点事件<input>

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM