首先描述一下問題場景: 在iso下的H5頁面作了一個彈窗,彈窗內帶輸入框,給用戶註冊 會員用。可是測試發現輸入框失去焦點時,頁面沒有回彈整個界面 卡死。如圖!
我用的不是IOS手機 只是展現一下問題場景,有一樣狀況的纔可 對症下藥繼續往下看。 而後引用一下啊一個大佬的文章也是我在解決這個問題時候看到的
原理講解連接vue
這篇文章詳解了爲何會出現這種狀況,坐着也給出瞭解決辦法, 可是對於多個輸入框,我我的通過嘗試,找到了一種新的辦法, 由於若是如文章中每次都去滾動內容,交互體驗方面會形成影響。 我所在項目是基於uni的一些已經封裝過的input組件。 源生的這個辦法也會通用。
先上input寫法 <input style="flex:1" @blur="onBlur" @focus="inputFocus" type="text" placeholder="請輸入手機號"/>
post
vue內的方法 inputFocus() { // #ifdef H5 this.hasDown=true; // #endif }, onBlur(){ // #ifdef H5 this.hasDown=false; setTimeout(() => { if(!this.hasDown){ window.scrollTo(0,0); document.getElementsByTagName('body')[0].scrollTop = 0; } }, 200); // #endif }, 而後說一下原理,其實原理很簡單,爲了避免影響用戶體驗, 不會再每次失去焦點的時候推進屏幕,而是作了200毫秒的延時 也就是說用戶在失去焦點,可是沒有繼續得到焦點的狀況下 纔會去推進屏幕。正好適合面對多個輸入框的狀況。