iOS Mobile Safari 隱藏光標
自己處理事件並繪製文本框,iOS 因無法操作鍵盤只能藉助 input 元素。
然而:
1. 若 input 完全不顯示,則無法獲得焦點;
2. 即便是隱藏,光標依舊可見;
3. 移出文檔區域會導致事件響應十分緩慢,iOS8 Safari 無此 bug,但 UIWebView 問題依舊;
4. 保留在文檔區域內但不在可視範圍內會自動滾動頁面且無法屏蔽,setTimeout 嘗試恢復會閃爍;
5. 縮小文本框尺寸到 0 會隱藏光標,但同時無法獲知光標位置(不爲 0 但很小則可以),且對 iOS8 Safari 無效;
貌似 iOS7 與 iOS8 的 UIWebView 表現類似,但是版本號不同;iOS8 Safari 與前兩者不同但版本號與 iOS8 UIWebView 相同。
感覺只能針對特定版本來實現,但更新會影響版本號,沒辦法全部測試。不知道 iOS6 的情況。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
问题解决了~
实测8.1.1和7.1.2,
特性:
問題已解決。
https://bumfo.github.io/l.html
核心代碼:
原理分析:
iOS8 的 Safari 支持在 input 外面顯示光標,因此之前修改 input 尺寸的方法無效;
iOS7 不支持在 input 外面顯示光標,某些情況下,光標位於視圖外會導致響應極其緩慢,但這時修改 input 尺寸的方法有效。
另外,若 input 尺寸(包括 border)有一項爲 0,在某些情況會出現無法獲取光標位置的問題。
綜上:
解決方案:
将
input
标签置于视图内,用transform: scale(0)
可将input
缩小。再通过一层div
去做代理,点击div
的时候去focus
被缩小的input
标签,这样就可以拉起键盘,同时还不会出现延迟的现象。