1. 程式人生 > >解決input獲取焦點,彈出輸入法之後,input被遮擋的問題

解決input獲取焦點,彈出輸入法之後,input被遮擋的問題

關於input輸入框fixed在視窗底部的時候,input獲取焦點,彈出輸入法,input會被輸入法遮擋,導致輸入內容不方便。

我們可以用scrollIntoViewscrollIntoViewIfNeeded來解決這個問題。scrollIntoViewscrollIntoViewIfNeeded都是讓當前的元素滾動到瀏覽器視窗的可視區域內。關於scrollIntoViewscrollIntoViewIfNeeded 的具體資訊可以檢視 此處

取決於其它元素的佈局情況,此元素可能不會完全滾動到頂端或底端。

所以應用scrollIntoView 的時候並不一定會滾動到頂端和底端。

解決input被遮擋的問題可以先點選此處檢視 例子 ,或者直接用手機掃描二維碼:
input被遮擋問題的處理例子

從例子中可以看到,每次點選input輸入框之後,輸入法會優先彈出,300ms之後將input輸入框滾動到瀏覽器視窗的可視區域內,輸入內容之後,點選確定,會在內容區域新增剛剛輸入的內容,並且在300ms之後將它滾動到瀏覽器視窗的可視區域內。

親測在安卓和ios下的微信6.6.7版本均有效。

例子程式碼如下:

<!DOCTYPE html>
<html>

<head>
    <meta charset="UTF-8">
    <meta name="viewport"
content="width=device-width, initial-scale=1.0, user-scalable=no, minimum-scale=1.0, maximum-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge"> <title>scrollIntoView</title> <link rel="stylesheet" href="https://fxss5201.cn/project/css/normalize.css"> <style
>
html, body { height: 100%; font-family: "Microsoft YaHei", Arial, Helvetica, "宋體", sans-serif; font-size: 14px; user-select: none; -webkit-touch-callout: none; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); } .clearfix:before, .clearfix:after { content: '.'; display: block; width: 0; height: 0; overflow: hidden; visibility: hidden; font-size: 0; line-height: 0; } .clearfix:after { clear: both; } .clearfix { zoom: 1; } .header { position: fixed; left: 0; top: 0; z-index: 10; width: 100%; height: 50px; line-height: 50px; padding: 0 15px; box-sizing: border-box; color: #fff; background: #999; } .body { padding: 50px 15px; width: 100%; overflow-y: scroll; box-sizing: border-box; line-height: 30px; } .footer { position: fixed; left: 0; bottom: 0; z-index: 10; width: 100%; height: 50px; padding: 8px 15px 9px; box-sizing: border-box; background: #fff; border-top: 1px solid #ddd; } .sure-btn { padding: 0; float: right; margin-left: 10px; width: 50px; height: 32px; color: #fff; font-size: 14px; background: #0FAEFF; border: 0; border-radius: 3px; -webkit-appearance: none; } .ellipsis { overflow: hidden; text-overflow: ellipsis; white-space: normal; } .text-input { box-sizing: border-box; width: 100%; height: 32px; border-radius: 3px; padding: 0 6px; border: 1px solid #ddd; -webkit-appearance: none; } </style> </head> <body> <div class="header">header</div> <div class="body" id="body"> body</br> body</br> body</br> body</br> body</br> body</br> body</br> body</br> body</br> body</br> body</br> body</br> body</br> body</br> body</br> body</br> body</br> body</br> body</br> body</br> body</br> body</br> body</br> body</br> </div> <div class="footer" id="footer"> <button class="sure-btn" id="sureBtn">確定</button> <div class="ellipsis"> <input type="text" class="text-input" id="textInput"> </div> </div> <script src="https://fxss5201.cn/project/js/jquery-1.11.3.js"></script> <script> $(function () { $("#textInput").on("focus", function () { setTimeout(function () { $("#textInput")[0].scrollIntoView(); $("#textInput")[0].scrollIntoViewIfNeeded(); }, 300); }); $("#sureBtn").on("click", function () { var textInputValur = $.trim($("#textInput").val()); $("#textInput").val("").focus(); var body = $("#body"); if (!textInputValur) { return false; } var str = $('<span>' + textInputValur + '</span></br>'); body.append(str); setTimeout(function () { str[0].scrollIntoView(); str[0].scrollIntoViewIfNeeded(); }, 300); }) }) </script> </body> </html>

相關推薦

解決input獲取焦點輸入法之後input遮擋的問題

關於input輸入框fixed在視窗底部的時候,input獲取焦點,彈出輸入法,input會被輸入法遮擋,導致輸入內容不方便。 我們可以用scrollIntoView 與 scrollIntoView

解決ios底部固定輸入框獲取焦點輸入法鍵盤擋住輸入框

ios端比較常見的,就是在頁面底部固定的輸入框,如下,一旦獲取焦點,彈出的輸入法鍵盤就會把input輸入框完全擋住,解決方法很簡單,加上下面的幾行程式碼即可       $(".replay_text").on("click", functi

Android的EditText自動獲取焦點輸入法問題

1.每次啟動新的Activity的時候,輸入法總是彈出來,太煩人了。 主要原因就是頁面上方有個EditTexit,每次都自動獲取焦點。 注意要求是:每次啟動新的Activity的時候,EditTexit不要獲取到焦點或者獲取到焦點也不讓輸入法彈出來,並不是阻止輸入法使用。只

開啟app後Edittext自動獲取焦點輸入法的方法

方法1.: 呼叫程式碼: //自動彈出鍵盤 InputMethodManager inputManager = (InputMethodManager) getApplication().getSystemService(Context.INPUT_METHOD_SERV

輸入法鍵盤標題欄上移消失問題解決

        當你做聊天或者評論類的佈局的時候,肯定會用到輸入框,而且輸入框一般都會在最底端,這個時候當你輸入的時候,系統會彈出輸入法鍵盤。輸入法鍵盤其實是一個dialog,因為它佔用空間,所以不得不讓我們自己的介面進行調整,一般調整會有兩個策略。第一個讓輸入法遮擋我們的

ios11層內的input框光標錯位 鍵盤輸入信息光標一直亂跳

樣式表 手機屏幕 return 底部 offset 情況 輸入框 fix win   之前開發了一個微信項目,維護期中蘋果手機突然出現光標錯位現象,經過排查,發現是最新的ios11系統的鍋。   具體情況:彈出層使用position: fixed;彈出層內附帶input/

EditText獲取焦點InputWindow

原文連結:https://stackoverflow.com/questions/10200950/android-edittext-inputtype-none-doesnt-work-becomes-textmultiline 獲取焦點時不彈inputwindow Step 1:

C#:點選按鈕輸入框輸入並獲取內容

1.起因 一開始是直接用 TextBox接收使用者的輸入內容,但是有時候不想在窗體上加控制元件,所以就想到了另一種辦法,彈出一個輸入框,輸入並獲取內容,之後輸入框又消失不見,不佔位置。 2.用法 先要在專案中引入框架   Microsoft.VisualStudio

android EditText 自動獲取焦點軟鍵盤

話不多說,直接上程式碼! EditText e; e=(EditText)findViewById(R.id.editText); //獲取焦點 e.setFocusable(true); e.setFocusableI

android AlertDialog中的Edittext自動獲取焦點軟鍵盤

private void confirmPhoneGurdPswd(final String guardPswd) { // 1.建立彈出式對話方塊 final AlertDialog.Builder alertDialog = ne

layui層layer過大遮擋解決辦法-resize事件自動調整

思路 pla title 位置 相關 無法 dex 前端 情況 遇到的問題 ??最近在使用layui做一個管理系統,由於前端技術有限,在開發過程中也遇到這樣那樣的問題,即比較簡單的問題有時也要搞半天。。??layer彈出窗口在彈出時指定了area,彈出後,如果當前頁面(if

解決archlinux中fcitx配置中不能調出任何輸入法與調出輸入法之後不能啟用使用的問題

前提,安裝了: # sudo pacman -S fcitx # sudo pacman -S fcitx-im # sudo pacman -S fcitx-configtool # sudo pacman -S fcitx-sogoupinyin 根據Fcitx (簡體中文), 我是gn

訊息提示框確認取消物品獲得提示框

一、 彈出提示框 Globals.MUIManager.CreatMessageLabel("支付失敗"); public T GetUI<T>() where T : HotFix_Project.UI.UI_Logic

移動web頁面input獲取焦點系統虛擬鍵盤時擋住input解決方案

移動頁面寫定位時不用fixed定位 const brand = navigator.userAgent.indexOf(‘Android’) if (brand > -1) { const maxHeight = document.body.cl

iOS下Html頁面中input獲取焦點鍵盤時擋住input解決方案—scrollIntoView()

scrollIntoView(alignWithTop): 滾動瀏覽器視窗或容器元素,以便在當前視窗的可見範圍看見當前元素。 alignWithTop 若為 true,或者什麼都不傳,那麼視窗

移動端解決fixed和input獲取焦點軟鍵盤影響定位的問題

場景描述, 當document的高度不夠window的高度時候,如在ip6中文件的高度比窗體的高度小,到底設計在最下方的區域沒有在窗體最下方,就留有空白地方如下圖的灰色部分 1、 解決初始化文件高度,讓文件高度等於窗體高度,並fixed需要定位的區域在最下方(functi

Android開發之使一開啟activity等介面Edittext獲取焦點軟鍵盤java程式碼實現

// 獲取編輯框焦點 editText.setFocusable(true); //開啟軟鍵盤 IInputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVI

bootstrap-modal:modal時input的checked的狀態無法改變 | | input獲取焦點不生效

1.每次彈出modal時 ,用 js 修改的 checked 狀態不能實時更新 <div class="modal fade" tabindex="-1" role="dialog">

ListView裡面有EditText鍵盤後EditView立刻不能獲取焦點的問題

遇到的問題是點選EditText,鍵盤彈出後,輸入游標會消失,需要再點選一次才能獲取游標,這個大概是因為listview不能很好的處理EditText作為item的情況,彈出鍵盤後應該view是重新生成

移動端fixed和input獲取焦點軟鍵盤影響定位的問題

在移動端使用fixed將按鈕定位在底部時,當input獲取焦點彈出軟鍵盤時,在安卓系統會獎底部的按鈕頂上去 // 檢測瀏覽器的resize事件,當高度過小時就可以判定為出現這種情況,這時把定位改成ab或者直接隱藏掉之類的。 var h = document.body.sc