fixed定位 input在IOS裝置上游標位置異常問題
阿新 • • 發佈:2019-02-19
頁面是個長頁面,點選頁面不同部分,會彈出彈窗,如果用absolute定位,那麼彈窗的位置就難以定位,因而決定採用fixed定位,此時在IOS 11.2.x 系統中就 會出現點選input游標位置異常的問題。
異常如圖所示:
原因分析
input的父元素是採用fixed定位的元素,此時input輸入框在IOS系統存在bug,input元素獲得焦點,吊起鍵盤的時候,頁面上fixed定位的元素會被上推,但是游標卻留在了原地,造成錯位的現象。
解決方案
當點選啟用彈窗按鈕的時候,給body設定fixed定位,讓其也脫離標準流文件,關閉彈窗的時候,讓其恢復relative定位。
程式碼示意:
body { position: relative; } body.fixed { position: fixed; width: 100% }
//開啟彈窗
openBtn.tap(function(){
$('body').addClass('fixed')
})
//關閉彈窗
closeBtn.tap(function() {
$('body').removeClass('fixed')
})
這裡會存在一個小小的問題,就是彈框彈出後,初次點選一次input框的時候,會彈出鍵盤,能正常輸入,但是游標不顯示,如果點選兩次input輸入框,就會顯示游標。
彈出了鍵盤,能輸入,但是游標不顯示:
再次點選,就一切正常:
後來諮詢了一些前端童鞋,很多是採用這種方式,點選一次游標不顯示的問題,繫系統BUG,後續IOS版本,蘋果已經修復該BUG。
目前採用以上方式,如果發現有更好的方式,會後續更新。