整合營銷服務商

          電腦端+手機端+微信端=數據同步管理

          免費咨詢熱線:

          小猿圈分享-如何做一個聽話的輸入框

          小猿圈分享-如何做一個聽話的輸入框

          在我們程序員日常的工作當中,經常會遇到一些讓人頭疼的槽點,小編也是經常遇到,今天就給大家分享如何讓輸入框聽話的技巧。

          問題探究

          1. ios中,輸入框獲得焦點時,頁面輸入框被遮蓋,定位的元素位置錯亂:

          當頁input存在于吸頂或者吸底元素中時,用戶點擊輸入框,輸入法彈出后,fiexd失效,頁面中定位好的元素隨屏幕滾動。

          針對這個問題,我們一起來看下以下幾種方案:

          方案一: Web API 接口 :scrollIntoView 的應用,將input輸入框顯示在可視區域。

          JavaScript

          // 輸入框獲得焦點時,元素移動到可視區域

          inputOnFocus(e) {

          setTimeout(function(){

          e.target.scrollIntoView(true);

          // true:元素的頂端將和其所在滾動區的可視區域的頂端對齊; false:底端對齊。

          },200); // 延時==鍵盤彈起需要時間

          }

          一行代碼,輕松搞定,輸入框就乖乖的出現在你眼前了。

          不過有點小缺陷:頁面過長時,由于fixed失效,輸入框依然也會跟著頁面滑走。

          這時,我們需要一個固定的輸入框……

          方案二:在輸入框獲得焦點時,將頁面滑動到最底部,避免fixed導致的頁面亂飛,并且保證input在最底部。

          JavaScript

          var timer;

          // 輸入框獲得焦點時,將元素設置為position:static,設置timer

          inputOnFocus(e) {

          e.target.style.className='input input-static';

          timer=setInterval(

          function() {

          document.body.scrollTop=document.body.scrollHeight

          }, 100)

          };

          // 輸入框失去焦點時,將元素設置為 position:fixed,清除timer

          inputOnbulr(e) {

          e.target.parentNode.className='input input-fixed';

          clearInterval(timer)

          };

          效果如下圖:

          當獲得焦點彈出虛擬鍵盤后,input輸入框會一直緊貼鍵盤頂部。如果,你的頁面彈出輸入法后不需要滑動查看其他內容,那么你對這種方案應該很中意。

          But,可能你做的是一個類似聊天的頁面,需要在回復時,查看歷史消息,那么,請你繼續往下看

          方案三:將頁面進行拆分: 頁面(main)=內容(sectionA) + 輸入框(sectionB)+ 其他(sectionOther)

          原理 :

          main.height=window.screen.height ;

          sectionA 絕對定位,進行內部滾動 overflow-y:scroll ;

          sectionB 可保證在頁面最底部。

          CSS

          .main { position: relative; height: 100%; }

          .sectionA { box-sizing: border-box; padding-bottom: 60px; height: 100%; overflow-y: scroll; -webkit-overflow-scrolling: touch //為了使滾動流暢,sectionA 添加屬性 }

          .sectionB { position: absolute; height: 60px; overflow: hidden; left: 0; right: 0; bottom: 0; }

          純css3打造,可以滾動,可以固定位置,基本滿足大部分布局需要。

          2. IOS中單行輸入框輸入內容長被遮蓋,不能顯示全部,且不能左右滑動。

          這個是IOS的一個bug,可以考慮用 textarea 替換 input,設置一行的高,進行上下滾動查看。(其他方案可以參看下面 第 6 點)

          3. 獲得焦點時,光標消失或錯位:

          -webkit-user-select:none 導致 input 框在 IOS 中無法輸入,光標不出現,設置如下

          JavaScript

          user-select:text;

          -webkit-user-select:text;

          利用scrollIntoView 使當前元素出現到指定位置,避免光標錯位,設置如下:

          JavaScript

          e.target.scrollIntoView(true);

          e.target.scrollIntoViewIfNeeded();

          4. 進入頁面如何自動獲取焦點,彈出軟鍵盤?

          · 添加 autofocus 屬性 支持自動獲得焦點

          · 觸發 focus() 事件

          5.隨文字輸入,輸入框寬度自適應。

          JavaScript

          onkeyPress(e) {

          const testLength=e.target.value.length;

          e.target.style.width=`${testLength*8+10}px`

          }

          這種方案基本滿足自動獲取效果。

          testLength 8 英文字符,testLength 16中文字符, +10為后邊光標預留位置。

          這種方案顯然不適用于對精確度有很高要求的需求。

          6. 介紹一個屬性:contenteditable,模擬輸入時動態獲取寬高

          (1)div設置contentditable=true 可以將此元素變成可輸入狀態。

          1

          <div class="inputContent" contenteditable="true" ></div>

          (2)想要變成input輸入框,利用css模擬輸入框的樣式

          CSS

          .inputContent{

          color:#444;

          border:#999 solid 1px;

          border-radius: 3px;

          padding: 5px 10px;

          box-sizing: border-box;

          min-width:50px;

          max-width: 300px;

          background: #ffffff;

          }

          這里配合min-width,max-width 效果更真實。

          (3)點擊div可以彈出軟鍵盤,但是無法輸入內容,需要設置屬性,如下

          CSS

          .inputContent{

          user-select:text;

          -webkit-user-select:text;

          }

          這樣就完成一個可以根據獲取輸入內容來動態來調節寬高。

          還可以利用js模擬placeholder等,這里就不展開了

          7.其他問題及解決

          · 輸入框獲得焦點可彈出軟鍵盤,卻沒有光標閃爍,也無法正常輸入。-webkit-user-select:none 導致的,可以這樣解決

          CSS

          *:not(input,textarea) {

          -webkit-touch-callout: none;

          -webkit-user-select: none;

          }

          · input 自定義樣式

          CSS

          // 使用偽類

          input::-webkit-input-placeholder,

          input::-moz-placeholder,

          input::-ms-input-placeholder {

          ...style

          text-align: center;

          }

          好了,就寫到這了,希望看過后對你能有幫助。別忘記分享給身邊的朋友,一起來學習,記得要關注哦,小猿圈會持續分享一些關于web學習的文章。

          將 HTML 網頁中的文本進行水平居中處理:

          <center>這個文本居中對齊。</center>

          瀏覽器支持

          所有主流瀏覽器都支持 <center> 標簽。


          標簽定義及使用說明

          HTML5 不支持 <center> 標簽。請用 CSS 代替。

          在 HTML 4.01 中,<center> 元素 已廢棄。

          <center> 對其所包括的文本進行水平居中。


          提示和注釋

          提示:請使用 CSS 樣式來居中文本!在 CSS 教程中您能了解到更多關于居中文本的細節。


          HTML 4.01 與 HTML5之間的差異

          HTML5 不支持 <center> 標簽,HTML 4.01 已廢棄 <center> 標簽。


          標準屬性

          在 HTML 4.01 中,<center> 標簽支持如下標準屬性:

          屬性描述
          classclassname規定元素的類名
          dirrtlltr規定元素中內容的文本方向
          idid規定元素的唯一 id
          langlanguage_code規定元素中內容的語言代碼
          stylestyle_definition規定元素的行內樣式
          titletext規定元素的額外信息

          如需完整的描述,請訪問標準屬性。


          事件屬性

          在 HTML 4.01 中,<center> 標簽支持如下事件屬性:

          屬性描述
          onclickscript當鼠標被單擊時執行腳本
          ondblclickscript當鼠標被雙擊時執行腳本
          onmousedownscript當鼠標按鈕被按下時執行腳本
          onmousemovescript當鼠標指針移動時執行腳本
          onmouseoutscript當鼠標指針移出某元素時執行腳本
          onmouseoverscript當鼠標指針懸停于某元素之上時執行腳本
          onmouseupscript當鼠標按鈕被松開時執行腳本
          onkeydownscript當鍵盤被按下時執行腳本
          onkeypressscript當鍵盤被按下后又松開時執行腳本
          onkeyupscript當鍵盤被松開時執行腳本

          如需完整的描述,請訪問事件屬性。

          如您還有不明白的可以在下面與我留言或是與我探討QQ群308855039,我們一起飛!

          HTML DOM 事件

          HTML DOM 事件允許Javascript在HTML文檔元素中注冊不同事件處理程序。

          事件通常與函數結合使用,函數不會在事件發生前被執行! (如用戶點擊按鈕)。

          提示: 在 W3C 2 級 DOM 事件中規范了事件模型。

          HTML DOM 事件

          DOM: 指明使用的 DOM 屬性級別。

          鼠標事件

          屬性描述DOM
          onclick當用戶點擊某個對象時調用的事件句柄。2
          oncontextmenu在用戶點擊鼠標右鍵打開上下文菜單時觸發
          ondblclick當用戶雙擊某個對象時調用的事件句柄。2
          onmousedown鼠標按鈕被按下。2
          onmouseenter當鼠標指針移動到元素上時觸發。2
          onmouseleave當鼠標指針移出元素時觸發2
          onmousemove鼠標被移動。2
          onmouseover鼠標移到某元素之上。2
          onmouseout鼠標從某元素移開。2
          onmouseup鼠標按鍵被松開。2

          鍵盤事件

          屬性描述DOM
          onkeydown某個鍵盤按鍵被按下。2
          onkeypress某個鍵盤按鍵被按下并松開。2
          onkeyup某個鍵盤按鍵被松開。2

          框架/對象(Frame/Object)事件

          屬性描述DOM
          onabort圖像的加載被中斷。 ( <object>)2
          onbeforeunload該事件在即將離開頁面(刷新或關閉)時觸發2
          onerror在加載文檔或圖像時發生錯誤。 ( <object>, <body>和 <frameset>)
          onhashchange該事件在當前 URL 的錨部分發生修改時觸發。
          onload一張頁面或一幅圖像完成加載。2
          onpageshow該事件在用戶訪問頁面時觸發
          onpagehide該事件在用戶離開當前網頁跳轉到另外一個頁面時觸發
          onresize窗口或框架被重新調整大小。2
          onscroll當文檔被滾動時發生的事件。2
          onunload用戶退出頁面。 ( <body> 和 <frameset>)2

          表單事件

          屬性描述DOM
          onblur元素失去焦點時觸發2
          onchange該事件在表單元素的內容改變時觸發( <input>, <keygen>, <select>, 和 <textarea>)2
          onfocus元素獲取焦點時觸發2
          onfocusin元素即將獲取焦點時觸發2
          onfocusout元素即將失去焦點時觸發2
          oninput元素獲取用戶輸入時觸發3
          onreset表單重置時觸發2
          onsearch用戶向搜索域輸入文本時觸發 ( <input="search">)
          onselect用戶選取文本時觸發 ( <input> 和 <textarea>)2
          onsubmit表單提交時觸發2

          剪貼板事件

          屬性描述DOM
          oncopy該事件在用戶拷貝元素內容時觸發
          oncut該事件在用戶剪切元素內容時觸發
          onpaste該事件在用戶粘貼元素內容時觸發

          打印事件

          屬性描述DOM
          onafterprint該事件在頁面已經開始打印,或者打印窗口已經關閉時觸發
          onbeforeprint該事件在頁面即將開始打印時觸發

          拖動事件

          事件描述DOM
          ondrag該事件在元素正在拖動時觸發
          ondragend該事件在用戶完成元素的拖動時觸發
          ondragenter該事件在拖動的元素進入放置目標時觸發
          ondragleave該事件在拖動元素離開放置目標時觸發
          ondragover該事件在拖動元素在放置目標上時觸發
          ondragstart該事件在用戶開始拖動元素時觸發
          ondrop該事件在拖動元素放置在目標區域時觸發

          多媒體(Media)事件

          事件描述DOM
          onabort事件在視頻/音頻(audio/video)終止加載時觸發。
          oncanplay事件在用戶可以開始播放視頻/音頻(audio/video)時觸發。
          oncanplaythrough事件在視頻/音頻(audio/video)可以正常播放且無需停頓和緩沖時觸發。
          ondurationchange事件在視頻/音頻(audio/video)的時長發生變化時觸發。
          onemptied當期播放列表為空時觸發
          onended事件在視頻/音頻(audio/video)播放結束時觸發。
          onerror事件在視頻/音頻(audio/video)數據加載期間發生錯誤時觸發。
          onloadeddata事件在瀏覽器加載視頻/音頻(audio/video)當前幀時觸發觸發。
          onloadedmetadata事件在指定視頻/音頻(audio/video)的元數據加載后觸發。
          onloadstart事件在瀏覽器開始尋找指定視頻/音頻(audio/video)觸發。
          onpause事件在視頻/音頻(audio/video)暫停時觸發。
          onplay事件在視頻/音頻(audio/video)開始播放時觸發。
          onplaying事件在視頻/音頻(audio/video)暫停或者在緩沖后準備重新開始播放時觸發。
          onprogress事件在瀏覽器下載指定的視頻/音頻(audio/video)時觸發。
          onratechange事件在視頻/音頻(audio/video)的播放速度發送改變時觸發。
          onseeked事件在用戶重新定位視頻/音頻(audio/video)的播放位置后觸發。
          onseeking事件在用戶開始重新定位視頻/音頻(audio/video)時觸發。
          onstalled事件在瀏覽器獲取媒體數據,但媒體數據不可用時觸發。
          onsuspend事件在瀏覽器讀取媒體數據中止時觸發。
          ontimeupdate事件在當前的播放位置發送改變時觸發。
          onvolumechange事件在音量發生改變時觸發。
          onwaiting事件在視頻由于要播放下一幀而需要緩沖時觸發。

          動畫事件

          事件描述DOM
          animationend該事件在 CSS 動畫結束播放時觸發
          animationiteration該事件在 CSS 動畫重復播放時觸發
          animationstart該事件在 CSS 動畫開始播放時觸發

          過渡事件

          事件描述DOM
          transitionend該事件在 CSS 完成過渡后觸發。

          其他事件

          事件描述DOM
          onmessage該事件通過或者從對象(WebSocket, Web Worker, Event Source 或者子 frame 或父窗口)接收到消息時觸發
          onmousewheel已廢棄。 使用 onwheel 事件替代
          ononline該事件在瀏覽器開始在線工作時觸發。
          onoffline該事件在瀏覽器開始離線工作時觸發。
          onpopstate該事件在窗口的瀏覽歷史(history 對象)發生改變時觸發。
          onshow該事件當 <menu> 元素在上下文菜單顯示時觸發
          onstorage該事件在 Web Storage(HTML 5 Web 存儲)更新時觸發
          ontoggle該事件在用戶打開或關閉 <details> 元素時觸發
          onwheel該事件在鼠標滾輪在元素上下滾動時觸發

          事件對象

          常量

          靜態變量描述DOM
          CAPTURING-PHASE當前事件階段為捕獲階段(3)1
          AT-TARGET當前事件是目標階段,在評估目標事件(1)2
          BUBBLING-PHASE當前的事件為冒泡階段 (2)3

          屬性

          屬性描述DOM
          bubbles返回布爾值,指示事件是否是起泡事件類型。2
          cancelable返回布爾值,指示事件是否可擁可取消的默認動作。2
          currentTarget返回其事件監聽器觸發該事件的元素。2
          eventPhase返回事件傳播的當前階段。2
          target返回觸發此事件的元素(事件的目標節點)。2
          timeStamp返回事件生成的日期和時間。2
          type返回當前 Event 對象表示的事件的名稱。2

          方法

          方法描述DOM
          initEvent()初始化新創建的 Event 對象的屬性。2
          preventDefault()通知瀏覽器不要執行與事件關聯的默認動作。2
          stopPropagation()不再派發事件。2

          目標事件對象

          方法

          方法描述DOM
          addEventListener()允許在目標事件中注冊監聽事件(IE8=attachEvent())2
          dispatchEvent()允許發送事件到監聽器上 (IE8=fireEvent())2
          removeEventListener()運行一次注冊在事件目標上的監聽事件(IE8=detachEvent())2

          事件監聽對象

          方法

          方法描述DOM
          handleEvent()把任意對象注冊為事件處理程序2

          文檔事件對象

          方法

          方法描述DOM
          createEvent()2

          鼠標/鍵盤事件對象

          屬性

          屬性描述DOM
          altKey返回當事件被觸發時,"ALT" 是否被按下。2
          button返回當事件被觸發時,哪個鼠標按鈕被點擊。2
          clientX返回當事件被觸發時,鼠標指針的水平坐標。2
          clientY返回當事件被觸發時,鼠標指針的垂直坐標。2
          ctrlKey返回當事件被觸發時,"CTRL" 鍵是否被按下。2
          Location返回按鍵在設備上的位置3
          charCode返回onkeypress事件觸發鍵值的字母代碼。2
          key在按下按鍵時返回按鍵的標識符。3
          keyCode返回onkeypress事件觸發的鍵的值的字符代碼,或者 onkeydown 或 onkeyup 事件的鍵的代碼。2
          which返回onkeypress事件觸發的鍵的值的字符代碼,或者 onkeydown 或 onkeyup 事件的鍵的代碼。2
          metaKey返回當事件被觸發時,"meta" 鍵是否被按下。2
          relatedTarget返回與事件的目標節點相關的節點。2
          screenX返回當某個事件被觸發時,鼠標指針的水平坐標。2
          screenY返回當某個事件被觸發時,鼠標指針的垂直坐標。2
          shiftKey返回當事件被觸發時,"SHIFT" 鍵是否被按下。2

          方法

          方法描述W3C
          initMouseEvent()初始化鼠標事件對象的值2
          initKeyboardEvent()初始化鍵盤事件對象的值3

          如您還有不明白的可以在下面與我留言或是與我探討QQ群308855039,我們一起飛!


          主站蜘蛛池模板: 性盈盈影院免费视频观看在线一区 | 亚洲国产一区在线| 亚洲国产一区在线观看| 一区二区在线免费观看| 一色一伦一区二区三区| 国产SUV精品一区二区88| 国产suv精品一区二区6| 78成人精品电影在线播放日韩精品电影一区亚洲 | 好吊妞视频一区二区| 香蕉免费一区二区三区| 国产一区二区三区播放心情潘金莲| 一区二区三区在线|日本| 日韩精品无码免费一区二区三区| 内射白浆一区二区在线观看 | 亚洲国产精品一区二区第一页免 | 久久人妻无码一区二区| 濑亚美莉在线视频一区| 久久国产一区二区三区| 国产在线一区二区杨幂| 亚洲午夜精品一区二区公牛电影院 | 精品一区二区三区免费视频| 日韩成人一区ftp在线播放| 国产激情з∠视频一区二区| 一区二区3区免费视频| 国产肥熟女视频一区二区三区| 国产精品无码亚洲一区二区三区 | 最新欧美精品一区二区三区| 日韩视频一区二区三区| 四虎在线观看一区二区| 久久精品一区二区影院| 亚洲大尺度无码无码专线一区| 日产亚洲一区二区三区| 亚洲午夜电影一区二区三区| 精品视频一区二区三区在线观看 | 美女视频在线一区二区三区| 亚洲日韩精品一区二区三区无码| 国产精华液一区二区区别大吗| 国产精品 一区 在线| 国产精品一区二区久久不卡| 国产精品综合AV一区二区国产馆| 国产精品亚洲不卡一区二区三区|