[vue]移動端軟鍵盤處理方案

前言

一談起移動端的軟鍵盤處理疯潭,都是令人比較頭疼的事情赊堪,由于系統(tǒng)機型不同,導致出現(xiàn)鍵盤彈出效果也大有差異竖哩。最近做的項目中都遇到了這些問題哭廉,故寫此文章記錄一下。
目前知道有以下問題:

  • Ios與Android的系統(tǒng)差異相叁,軟鍵盤彈出后群叶,頁面的webview表現(xiàn)是不同的。
  • 如果頁面設(shè)計的input或者textarea位于頁面的中下部位钝荡,或者底部時街立,彈出軟鍵盤的時候會遮擋輸入框。
  • 在微信版本6.7.4以上埠通,IOS系統(tǒng)版本12以上赎离,當軟鍵盤彈起后,頁面(webview)整體往上滾動端辱,當鍵盤收起后梁剔,不回到原位,導致鍵盤原來所在位置是空白的舞蔽。

問題解決

監(jiān)聽軟鍵盤的狀態(tài)

如果想對鍵盤事件做相應(yīng)的處理荣病,我們首先得獲取到軟鍵盤彈出或者收起的狀態(tài),然后做相應(yīng)處理渗柿,但是H5中并無直接提供軟鍵盤彈起事件的監(jiān)聽方法个盆,那么脖岛,我們換種思路去實現(xiàn)監(jiān)聽。

由于上面提過颊亮,IOS與Android軟鍵盤彈起后柴梆,頁面webview表現(xiàn)是不同的,是怎樣的不同呢终惑?

1.IOS在點擊input框或者textarea框的之后绍在,軟鍵盤彈起,頁面的高度的高度并沒有改變雹有,只是webview整體上移了偿渡,并且執(zhí)行的scrollTop方法,scrollTop的距離即為軟鍵盤的高度霸奕。

2.Android在點擊input框或者textarea后卸察,軟鍵盤彈起,頁面高度改變铅祸,webview被壓縮。

在安卓上處理軟鍵盤時間

因此合武,對于Android機的軟鍵盤彈起或收起临梗,可以通過resize方法監(jiān)聽到,但是在IOS機型上稼跳,resize事件是不會觸發(fā)的盟庞。

簡單暴力點,對于Android機型的處理汤善,可以直接寫在index.html 的script里面什猖。如下:

  const u = navigator.userAgent;
    if (u.indexOf('Android') > -1 || u.indexOf('Linux') > -1) { //安卓手機
      window.addEventListener('resize', function () {
        // Document 對象的activeElement 屬性返回文檔中當前獲得焦點的元素。
        if (document.activeElement.tagName === 'INPUT' || document.activeElement.tagName === 'TEXTAREA') {
          console.log('安卓觸發(fā)', document.activeElement.tagName)
          window.setTimeout(function() {
            document.activeElement.scrollIntoView(true);
          }, 50);
        }
      })
    }

這樣既可解決Android機型上軟鍵盤遮擋輸入框問題
關(guān)于scrollIntoView方法:
Element.scrollIntoView()方法讓當前的元素滾動到瀏覽器窗口的可視區(qū)域內(nèi),
這里接受一個參數(shù)红淡,可以是Boolean類型也可以是object類型不狮,這里,我們只說下
Boolean類型在旱,如果為true摇零,元素的頂端將和其所在滾動區(qū)的可視區(qū)域的頂端對齊,如果為false桶蝎,元素的底端將和其所在滾動區(qū)的可視區(qū)域的底端對齊驻仅。上面代碼中,我們設(shè)置了true,那么input或者textarea將會頂?shù)巾敳靠梢晠^(qū)域登渣。

在IOS上處理軟鍵盤事件

1.IOS上既然不會觸發(fā)resize事件噪服,那我們采用@focus和@blur來處理:

onFocus () {
      const u = navigator.userAgent
      if (u.indexOf('Android') > -1 || u.indexOf('Linux') > -1) { // 安卓手機
      } else { // ios
        setTimeout(() => {
          document.getElementsByTagName('body')[0].style.height = '400px'
          this.$refs.ttextarea.scrollIntoView(false)
        }, 50)
      }
    },

 onBlur () {
      setTimeout(function () {
        document.getElementsByTagName('body')[0].style.height = window.innerHeight + 'px'
      }, 50)
    },

大致思路就是在聚焦的時候把頁面可視區(qū)域高度設(shè)置一個固定值,這里的400px只是參考值胜茧,具體需要調(diào)試計算粘优。scrollIntoView(false)講input或者是textarea滾動到可視區(qū)域底部,所以就是貼著軟鍵盤上方了。

2.還有一種思路就是在聚焦的時候敬飒,把頁面設(shè)置為fixed,這樣也能解決

處理在微信上ios軟鍵盤事件

在微信版本6.7.4以上邪铲,IOS系統(tǒng)版本12以上,當軟鍵盤彈起后无拗,頁面(webview)整體往上滾動带到,當鍵盤收起后,不回到原位英染,導致鍵盤原來所在位置是空白的揽惹,處理方法:在blur后處理:

 onBlur () { 
      setTimeout(() => {
        window.scrollTo(0, document.body.scrollTop + 1)
        document.body.scrollTop >= 1 && window.scrollTo(0, document.body.scrollTop - 1)
      }, 50)
    },
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市四康,隨后出現(xiàn)的幾起案子搪搏,更是在濱河造成了極大的恐慌,老刑警劉巖闪金,帶你破解...
    沈念sama閱讀 216,470評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件疯溺,死亡現(xiàn)場離奇詭異,居然都是意外死亡哎垦,警方通過查閱死者的電腦和手機囱嫩,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,393評論 3 392
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來漏设,“玉大人墨闲,你說我怎么就攤上這事≈?冢” “怎么了鸳碧?”我有些...
    開封第一講書人閱讀 162,577評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長犬性。 經(jīng)常有香客問我瞻离,道長,這世上最難降的妖魔是什么乒裆? 我笑而不...
    開封第一講書人閱讀 58,176評論 1 292
  • 正文 為了忘掉前任琐脏,我火速辦了婚禮,結(jié)果婚禮上缸兔,老公的妹妹穿的比我還像新娘日裙。我一直安慰自己,他們只是感情好惰蜜,可當我...
    茶點故事閱讀 67,189評論 6 388
  • 文/花漫 我一把揭開白布昂拂。 她就那樣靜靜地躺著,像睡著了一般抛猖。 火紅的嫁衣襯著肌膚如雪格侯。 梳的紋絲不亂的頭發(fā)上鼻听,一...
    開封第一講書人閱讀 51,155評論 1 299
  • 那天,我揣著相機與錄音联四,去河邊找鬼撑碴。 笑死,一個胖子當著我的面吹牛朝墩,可吹牛的內(nèi)容都是我干的醉拓。 我是一名探鬼主播,決...
    沈念sama閱讀 40,041評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼收苏,長吁一口氣:“原來是場噩夢啊……” “哼亿卤!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起鹿霸,我...
    開封第一講書人閱讀 38,903評論 0 274
  • 序言:老撾萬榮一對情侶失蹤排吴,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后懦鼠,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體钻哩,經(jīng)...
    沈念sama閱讀 45,319評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,539評論 2 332
  • 正文 我和宋清朗相戀三年肛冶,在試婚紗的時候發(fā)現(xiàn)自己被綠了街氢。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,703評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡淑趾,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出忧陪,到底是詐尸還是另有隱情扣泊,我是刑警寧澤,帶...
    沈念sama閱讀 35,417評論 5 343
  • 正文 年R本政府宣布嘶摊,位于F島的核電站延蟹,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏叶堆。R本人自食惡果不足惜阱飘,卻給世界環(huán)境...
    茶點故事閱讀 41,013評論 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望虱颗。 院中可真熱鬧沥匈,春花似錦、人聲如沸忘渔。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,664評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽畦粮。三九已至散址,卻和暖如春乖阵,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背预麸。 一陣腳步聲響...
    開封第一講書人閱讀 32,818評論 1 269
  • 我被黑心中介騙來泰國打工瞪浸, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人吏祸。 一個月前我還...
    沈念sama閱讀 47,711評論 2 368
  • 正文 我出身青樓对蒲,卻偏偏與公主長得像,于是被迫代替她去往敵國和親犁罩。 傳聞我的和親對象是個殘疾皇子齐蔽,可洞房花燭夜當晚...
    茶點故事閱讀 44,601評論 2 353

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

  • 本文轉(zhuǎn)載自wuwhs的segmentfault專欄 最近一段時間在做 H5 聊天項目,踩過其中一大坑:輸入框獲取焦...
    兔子不打地鼠打代碼閱讀 10,086評論 1 12
  • 轉(zhuǎn)載 1. 問題描述: 最近一段時間在做 H5 項目床估,踩過其中一大坑:輸入框獲取焦點含滴,軟鍵盤彈起,要求輸入框吸附(...
    星空里的塵埃閱讀 653評論 0 2
  • 之前在做H5 項目丐巫,踩過其中一大坑:輸入框獲取焦點谈况,軟鍵盤彈起,要求輸入框吸附(或頂)在輸入法框上递胧。需求很明確碑韵,看...
    超級無敵可愛的閱讀 2,265評論 0 3
  • 我正在吃午飯,政教主任打電話讓我去教導處缎脾,說有點事兒祝闻。 我匆匆吃完碗中的米,慌忙來到教導處遗菠。 剛進教導處的門联喘,一個...
    靜心專注閱讀 754評論 9 6
  • 若真修道人贺拣,必經(jīng)魔難蓖谢,不魔不成佛,真正發(fā)心修行的人譬涡,在真心觸動的一刻即震動三界闪幽,一定會有千磨萬難在等著你。就像唐僧...
    三十七度光閱讀 1,304評論 0 0