<center><font size = "6px">H5混合開發軟鍵盤適配方案</font></center>javascript
當前端界面的輸入框位於頁面底部,鍵盤喚醒時,就會遮擋輸入框。此時用戶在輸入時就不能看到已經輸入的內容,形成很很差的用戶體驗。前端
原生鍵盤的喚醒方式大概分爲兩種,一種是平鋪在頁面上,和頁面不屬於同一層級;另外一種是鍵盤喚醒時將頁面向上擠壓,使其位於同一層級。這裏咱們採用第二種方案。當鍵盤喚醒時,將整個webview向上擠壓,頁面向上擠壓的高度爲鍵盤的高度。此時預想的結果是實現qq微信發送消息的效果。java
android代碼:android
cordova.getActivity().runOnUiThread(new Runnable() { @Override public void run() { cordova.getActivity().getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE); callbackContext.success(); } });
在這裏前端不須要作處理。本覺得這個方案是最完美的。但是發現ios11.1和ios11.2不生效。這就很頭疼了。爲了適配ios,不得不想新的解決思路。ios
綜合考慮了android和ios的版本問題,這裏咱們採用不一樣系統採用不一樣處理方式的方案。經過前端判斷設備類型,在輸入框獲取焦點的時候,進行下一步處理。android採起以上的實現方式。ios就採起下面要說的這種方式。web
根據ios的特性,咱們採起前端處理的方式來實現。當前端獲取到焦點時,將整個body向上推。類型於第一種方式,只不過是前端來處理。微信
前端代碼:ide
var scrollTime; var timerId; if(typeof (device)!="undefined"&&device.platform=='iOS'){ let num = 0; scrollTime = setInterval(function(){ timerId = true; if (num < 9) { num++; } else { clearInterval(scrollTime); timerId = null; document.body.scrollTop = document.body.scrollHeight; return; } document.body.scrollTop = document.body.scrollHeight; },100) }
下面來說一下原理:code
在獲取焦點時,執行以上代碼。由於鍵盤彈起有一個延遲,咱們在這裏寫了一個定時器,來實現這個過分。就能實現相似於qq微信的效果了。orm
這裏須要注意的是,在失去焦點的時候,咱們要清除這個定時器。再執行
document.body.scrollTop = document.body.scrollHeight;
達到完美過分的效果。固然,想實現順滑的效果,仍是用原生寫吧。