關(guān)于ios中碰到的軟鍵盤彈出笛坦,導(dǎo)致的底部輸入框定位出現(xiàn)問(wèn)題的解決方案

關(guān)于ios中碰到的軟鍵盤彈出摊滔,導(dǎo)致的底部輸入框定位出現(xiàn)問(wèn)題的解決方案

背景

目前正在做IM相關(guān)的H5頁(yè)面,碰到了ios下軟鍵盤彈出槐脏,底部fixed失效的問(wèn)題喉童。在ios下,body的高度不會(huì)隨著軟鍵盤的彈出而變小顿天,所以頂部和底部的fixed元素位置都變得不正確了堂氯。要解決蘋果輸入框彈起被軟鍵盤遮住的問(wèn)題,切記不能使用傳統(tǒng)的fixed或者absolute布局露氮,根本解決不了輸入框被遮住的問(wèn)題祖灰。網(wǎng)上看了很多的解決辦法都沒(méi)有實(shí)現(xiàn)。

解決方案

首先采用flex布局來(lái)定位頭部畔规,中間和底部

<div class="con">
 <div class="top">頭部固定</div>
 <div class="content">中間內(nèi)容區(qū)域</div>
 <div class="bottom">底部輸入框: <input focus="focus" blur="blur" /></div>
</div>
.con{
 display:flex;
}
.top,.bottom{
 height:50px;
}
.content{
 flex: 1 auto;
overflow:auto;
}

先看一下在不同ios版本中局扶,軟鍵盤彈出后輸入框的位置

ios版本 表現(xiàn)
10 輸入框頂?shù)搅塑涙I盤之上
11 輸入框頂?shù)搅塑涙I盤以上
12 輸入框位置并沒(méi)有發(fā)生改變

思路是這樣的:

  • 當(dāng)輸入框focus的時(shí)候,調(diào)用getBoundingClientRect方法獲取矩形信息
  • 延時(shí)100毫秒后叁扫,再次調(diào)用getBoundingClientRect方法獲取矩形信息
  • 兩次信息的top值做一個(gè)差值三妈,如果>0則表示輸入框已經(jīng)在軟鍵盤之上
  • top的差值===0,則表示輸入框的位置沒(méi)有發(fā)生改變,這里調(diào)用元素的scrollIntoView方法來(lái)強(qiáng)制使得輸入框滾動(dòng)到可視區(qū)莫绣,之后再通過(guò)getBoundingClientRect來(lái)獲取矩陣信息畴蒲,計(jì)算兩次top的差值得到軟鍵盤的高度。
  • 隨后設(shè)置body的height = window.innerHeight - 軟鍵盤高度
  • 再次調(diào)用輸入框的scrollIntoView(false);
  • 當(dāng)輸入框blur的時(shí)候对室,重新設(shè)置body的height即可
{
 focus:(e){
  const originRect = e.target.getBoundingClientRect();
  const isFirst = false;

  setTimeout(()=>{
   let rect = e.target.getBoundingClientRect();
   
   if(isFirst){
     if(rect.top - originRect.top<0){
        // todo 設(shè)置body的height 
        document.body.style.height = window.innerHeight - (originRect.top - rect.top) + "px";
        e.target.scrollIntoView(false);
        return;
     }
   }

   e.target.scrollIntoView(false);

   setTimeout(()=>{
     rect = e.target.getBoundingClientRect();
     // 某些機(jī)型下模燥,得到的top為負(fù)值,直接使用window.innerHeight
     if(rect.top>0){
        document.body.style.height = window.innerHeight + "px";
     }else{
        document.body.style.height = window.innerHeight - (originRect.top - rect.top) + "px";
     }
     e.target.scrollIntoView(false);
   },100);

   isFirst  = false;
  },100);
 },
 blur:(){
     document.body.style.height = "100%";
 }
}

問(wèn)題解決掩宜,如有問(wèn)題蔫骂,可以郵件給我(nick121212@126.com

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市牺汤,隨后出現(xiàn)的幾起案子辽旋,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,755評(píng)論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件补胚,死亡現(xiàn)場(chǎng)離奇詭異码耐,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)溶其,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,305評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門骚腥,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人握联,你說(shuō)我怎么就攤上這事桦沉。” “怎么了金闽?”我有些...
    開(kāi)封第一講書人閱讀 165,138評(píng)論 0 355
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)剿骨。 經(jīng)常有香客問(wèn)我代芜,道長(zhǎng),這世上最難降的妖魔是什么浓利? 我笑而不...
    開(kāi)封第一講書人閱讀 58,791評(píng)論 1 295
  • 正文 為了忘掉前任挤庇,我火速辦了婚禮,結(jié)果婚禮上贷掖,老公的妹妹穿的比我還像新娘嫡秕。我一直安慰自己,他們只是感情好苹威,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,794評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布昆咽。 她就那樣靜靜地躺著,像睡著了一般牙甫。 火紅的嫁衣襯著肌膚如雪掷酗。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書人閱讀 51,631評(píng)論 1 305
  • 那天窟哺,我揣著相機(jī)與錄音泻轰,去河邊找鬼。 笑死且轨,一個(gè)胖子當(dāng)著我的面吹牛浮声,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播旋奢,決...
    沈念sama閱讀 40,362評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼泳挥,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了黄绩?” 一聲冷哼從身側(cè)響起羡洁,我...
    開(kāi)封第一講書人閱讀 39,264評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎爽丹,沒(méi)想到半個(gè)月后筑煮,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體辛蚊,經(jīng)...
    沈念sama閱讀 45,724評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,900評(píng)論 3 336
  • 正文 我和宋清朗相戀三年真仲,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了袋马。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,040評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡秸应,死狀恐怖虑凛,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情软啼,我是刑警寧澤桑谍,帶...
    沈念sama閱讀 35,742評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站祸挪,受9級(jí)特大地震影響锣披,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜贿条,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,364評(píng)論 3 330
  • 文/蒙蒙 一雹仿、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧整以,春花似錦胧辽、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 31,944評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至帆调,卻和暖如春奠骄,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背番刊。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 33,060評(píng)論 1 270
  • 我被黑心中介騙來(lái)泰國(guó)打工含鳞, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人芹务。 一個(gè)月前我還...
    沈念sama閱讀 48,247評(píng)論 3 371
  • 正文 我出身青樓蝉绷,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親枣抱。 傳聞我的和親對(duì)象是個(gè)殘疾皇子熔吗,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,979評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容

  • 1、通過(guò)CocoaPods安裝項(xiàng)目名稱項(xiàng)目信息 AFNetworking網(wǎng)絡(luò)請(qǐng)求組件 FMDB本地?cái)?shù)據(jù)庫(kù)組件 SD...
    陽(yáng)明先生_X自主閱讀 15,982評(píng)論 3 119
  • Hello!大家好,我是擇顏中跌!擇顏美食的優(yōu)勢(shì)在于 針對(duì)性強(qiáng)咨堤,分類細(xì)致,便于需要時(shí)查找學(xué)習(xí)漩符。我們主要圍繞:健康一喘!營(yíng)養(yǎng)...
    擇顏閱讀 1,634評(píng)論 0 0
  • 我常常問(wèn)他,永遠(yuǎn)有多遠(yuǎn)嗜暴?他說(shuō)凸克,永遠(yuǎn)就是我和你的距離∶屏ぃ可是萎战,我覺(jué)得在時(shí)光漸漸的逃離中,我和他的距離變得越來(lái)越遠(yuǎn)狐赡,直至...
    潤(rùn)寒閱讀 311評(píng)論 0 3
  • 三年前上海上演了小學(xué)課本刪除古詩(shī)的鬧劇颖侄,最近臺(tái)灣教育部門又要大量刪除古文,這種淺薄的改革又要重蹈百年前的革...
    慢生活工坊閱讀 515評(píng)論 0 0