原生APP的彈出虛擬鍵盤和收回虛擬鍵盤逾条,輸入框始終貼在虛擬鍵盤的上方琢岩。如下圖:
如果移動端web也想做類似的功能,可以實現(xiàn)嗎师脂?
你可能會說著:“不就是放一個position: fixed;的輸入框在頁面底部嘛,有什么好難的江锨?!”
當時我也是這么想的(⊙﹏⊙)吃警,但事實真的是這樣嗎?下面我們來看一些測試結果啄育。
安卓4.2.1-qq瀏覽器酌心,測試結果如下:
如圖所示,輸入框不見了挑豌。安券。。
再看看ios的safari:
為何又多了條白帶氓英?
還有侯勉,收起鍵盤后,為啥頁面下移了铝阐。址貌。。
好吧,其實這只是問題的冰山一角练对。
進入正題遍蟋,怎么才能解決這些問題呢?
我們可以先從虛擬鍵盤入手螟凭,看看是否可以監(jiān)聽到呼出鍵盤虚青、收回鍵盤這兩個事件。
部分瀏覽器可以通過捕捉resize事件知道是否呼出收起虛擬鍵盤螺男。
測試頁:http://backtonaturedemo.github.io/frontend/case/keyborad/resize.html
下面是測試的結果:
iPhone 5s iOS 8.2 :
(n表示不能觸發(fā)resize事件挟憔,y表示能觸發(fā)resize事件)
注意:ios的UC瀏覽器中,點擊fixed定位的輸入框烟号,呼出鍵盤后無法輸入绊谭。
Coolpad8720Q Andorid 4.2.1
那么監(jiān)聽focus和blur事件又如何呢?
測試頁:http://backtonaturedemo.github.io/frontend/case/keyborad/focusblur.html
用上述兩臺機器繼續(xù)測試汪拥,結論如下:
1. ? ios和安卓點擊輸入框都會觸發(fā)focus事件
2. ? ios的所有瀏覽器點擊虛擬鍵盤的“完成“鍵或者其他方式收起鍵盤都會觸發(fā)blur事件
3. ? 安卓手機在點擊”收起按鈕“或者其他操作收起鍵盤的時候达传,沒有觸發(fā)blur事件,焦點還是在輸入框上迫筑。
下面為測試截圖
所以宪赶,可以采取如下方案做web評論發(fā)表框
示例頁面:http://backtonaturedemo.github.io/frontend/case/keyborad/demo1.html
1. ?除評論框以外的元素都放在一個父元素,這里父元素是main脯燃。
2. ?評論框和發(fā)布按鈕放在一個div里
呼出鍵盤后搂妻,隱藏.main(除評論框以外的元素)。
撐高輸入框辕棚,取消輸入框的fixed欲主,加入上外邊距(給發(fā)表按鈕留下位置)。
當輸入框blur或點擊取消逝嚎,還原頁面扁瓢。
注意:需要在呼出鍵盤前,紀錄下頁面滾動條位置补君。