1. 程式人生 > >fixed定位 input在IOS裝置上游標位置異常問題

fixed定位 input在IOS裝置上游標位置異常問題

頁面是個長頁面,點選頁面不同部分,會彈出彈窗,如果用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。

目前採用以上方式,如果發現有更好的方式,會後續更新。