欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

iOS移動端軟鍵盤彈起空白和滾動穿透問題解決方案

 更新時間:2023年07月28日 10:24:21   作者:幽丶墨  
這篇文章主要為大家介紹了iOS移動端軟鍵盤彈起空白和滾動穿透問題解決方案,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪

引言

在做h5移動端項目的時候,給用戶一個十分友好的體驗是很必要的。最近抽空整理了下移動端(iOS端)項目中經(jīng)常碰到的兩個問題

鍵盤彈起空白

在我們點擊input等彈出手機鍵盤,在點擊完成后經(jīng)常會在底部出現(xiàn)跟鍵盤同大小的空白,但是當我們滾動下頁面發(fā)現(xiàn)又好了,這個在iOS端可以說很常見的問題了(應(yīng)該是布局定位造成的,具體原因沒仔細研究),解決方法就是在結(jié)束輸入的時候控制滾動條偏移下就好。

下面是相關(guān)代碼:

.inTouch {
  -webkit-overflow-scrolling: auto;
}
.noTouch {
  -webkit-overflow-scrolling: touch;
}
import Vue from 'vue'
Vue.directive('resetPage', {
  inserted (el) {
    document.body.addEventListener('focusin', () => {
      if (/(iPhone|iPad|iPod|iOS)/i.test(navigator.userAgent)) {
        // 軟鍵盤收起的事件處理
        setTimeout(() => {
          document.getElementsByTagName('body')[0].className = 'inTouch'
        }, 100)
      }
    })
    document.body.addEventListener('focusout', () => {
      if (/(iPhone|iPad|iPod|iOS)/i.test(navigator.userAgent)) {
        // 軟鍵盤收起的事件處理
        setTimeout(() => {
          const scrollHeight = document.documentElement.scrollTop || document.body.scrollTop || 0
          window.scrollTo(0, Math.max(scrollHeight - 1, 0))
          document.getElementsByTagName('body')[0].className = 'noTouch'
        }, 100)
      }
    })
  }
})

在iOS端,當元素獲得焦點的時候,我們把-webkit-overflow-scrolling的值設(shè)為auto,防止?jié)L動穿透。當元素失去焦點的時候,我們把值恢復(fù)為touch,這樣頁面的滾動效果不會丟失,同時我們控制滾動條偏移了1像素,解決軟鍵盤彈起空白的問題。

關(guān)于我設(shè)置的-webkit-overflow-scrolling屬性可多說兩句:

// -webkit-overflow-scrolling這個樣式相信大家都很熟悉了,有auto、touch兩個可選值
// auto:使用普通滾動, 當手指從觸摸屏上移開,滾動會立即停止。
// touch:使用具有回彈效果的滾動, 當手指從觸摸屏上移開,內(nèi)容會繼續(xù)保持一段時間的滾動效果。繼續(xù)滾動的速度和持續(xù)的時間和滾動手勢的強烈程度成正比。同時也會創(chuàng)建一個新的堆棧上下文。
// 為了增加滾動的流暢性,做iOS移動端適配的時候都會增加這個樣式適配的
-webkit-overflow-scrolling: touch;

查看兼容性的事后素我們發(fā)現(xiàn)只在iOS端可用,但是出現(xiàn)的問題也很多,我這里加上主要原因是當input失去焦點的時候,有的時候整個頁面會卡頓?。ㄟ@個問題在webview中碰到的),我發(fā)現(xiàn)加上這個之后會解決這個問題,就把這兩個放到一起了,不需要的可以不加上這個相關(guān)的。

我用的是mint-ui開發(fā)的移動端,所以在輸入框的時候就可以這樣使用

<mt-field class="l-modal-body-input" v-reset-page :attr="{ maxlength: 15 }" v-model="name" label="姓名:"></mt-field>

滾動穿透問題

這個可以說也是很常見的問題了,在我們做彈框滾動,如地址或時間picker選擇器的時候,我們在滾動選擇時候,底部的頁面也會跟著一起滾動,一定程度上影響了用戶的體驗。經(jīng)查找研究,當我們彈框的時候移除body的touchmove事件,是可以解決這個問題的:

// 鎖定body滾動條--主要解決用戶彈框滾動時的穿透
Vue.prototype.closeTouch = function () {
  document.getElementsByTagName('body')[0].addEventListener('touchmove', this.handler, {passive: false}) // 阻止默認事件
}
Vue.prototype.openTouch = function () {
  document.getElementsByTagName('body')[0].removeEventListener('touchmove', this.handler, {passive: false}) // 打開默認事件
}
handler: (e) => {
    e.preventDefault()
}

當我們打開picker等彈框的時候,調(diào)用this.closeTouch(),鎖定滾動,阻止默認事件。關(guān)閉彈框的時候調(diào)用this.openTouch()打開默認事件。過程雖然比較麻煩,但能實際解決問題!

以上是我做iOS移動項目時遇到的比較常見的問題,更多關(guān)于iOS軟鍵盤彈起空白滾動穿透的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • iOS 二維碼掃描相關(guān)功能實現(xiàn)

    iOS 二維碼掃描相關(guān)功能實現(xiàn)

    這篇文章主要介紹了iOS 二維碼掃描相關(guān)功能實現(xiàn),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-09-09
  • iOS實現(xiàn)無感知上拉加載更多功能的思路與方法

    iOS實現(xiàn)無感知上拉加載更多功能的思路與方法

    下拉刷新和上拉加載更多功能是一個應(yīng)用非常廣泛的一個效果,最新項目中就遇到這個功能,這篇文章主要給大家介紹了關(guān)于iOS實現(xiàn)無感知上拉加載更多功能的思路與方法,需要的朋友可以參考下
    2021-07-07
  • iOS實現(xiàn)高效裁剪圖片圓角算法教程

    iOS實現(xiàn)高效裁剪圖片圓角算法教程

    經(jīng)??吹礁鞣N高效裁剪圓角的文章,正好之前做過一點數(shù)字圖像處理,所以寫個裁剪圓角的算法,下面這篇文章主要給大家介紹了關(guān)于iOS實現(xiàn)高效裁剪圖片圓角算法的相關(guān)資料,文中通過示例代碼介紹的非常詳細,需要的朋友可以參考下
    2018-06-06
  • iOS讀寫json文件的方法示例

    iOS讀寫json文件的方法示例

    這篇文章主要給大家介紹了關(guān)于iOS讀寫json文件的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-01-01
  • iOS實現(xiàn)支付寶螞蟻森林隨機按鈕及抖動效果

    iOS實現(xiàn)支付寶螞蟻森林隨機按鈕及抖動效果

    這篇文章主要為大家詳細介紹了iOS實現(xiàn)支付寶螞蟻森林隨機按鈕及抖動效果,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-02-02
  • Objective-C 宏定義詳細介紹

    Objective-C 宏定義詳細介紹

    這篇文章主要介紹了Objective-C 宏定義詳細介紹的相關(guān)資料,這樣開發(fā)起來,更有效率,更好,更簡潔,需要的朋友可以參考下
    2016-10-10
  • 仿IOS效果 帶彈簧動畫的ListView

    仿IOS效果 帶彈簧動畫的ListView

    這篇文章主要介紹了仿IOS效果,帶彈簧動畫的ListView,感興趣的小伙伴們可以參考一下
    2016-01-01
  • 移動端固定輸入框在底部會被鍵盤遮擋的解決方法(必看篇)

    移動端固定輸入框在底部會被鍵盤遮擋的解決方法(必看篇)

    下面小編就為大家分享關(guān)于移動端固定輸入框在底部會被鍵盤遮擋的解決方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2017-12-12
  • iOS實現(xiàn)自定義表單實例代碼

    iOS實現(xiàn)自定義表單實例代碼

    表單對大家來說應(yīng)該都不陌生,下面這篇文章主要給大家介紹了關(guān)于iOS如何實現(xiàn)自定義表單的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧。
    2018-04-04
  • Flutter Widgets MediaQuery控件屏幕信息適配

    Flutter Widgets MediaQuery控件屏幕信息適配

    這篇文章主要為大家介紹了Flutter Widgets 之 MediaQuery控件獲取屏幕信息和屏幕適配示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-11-11

最新評論