微信瀏覽器input常見問題


微信中 input 引起的一些常見問題

一、ios端兼容input光標高度

input輸入框光標,在安卓手機上顯示沒有問題,但是在蘋果手機上 當點擊輸入的時候,光標的高度和父盒子的高度一樣。

原因:

通常我們習慣用height屬性設置行間的高度和line-height屬性設置行間的距離(行高),當點擊輸入的時候,光標的高度就自動和父盒子的高度一樣了。(谷歌瀏覽器的設計原則,還有一種可能就是當沒有內容的時候光標的高度等於input的line-height的值,當有內容時,光標從input的頂端到文字的底部

解決方法: 

高度height和行高line-height內容用padding撐開

 

二、ios端上下滑動時卡頓,頁面缺失

在ios端,上下滑動頁面時,如果頁面高度超出了一屏,就會出現明顯的卡頓,頁面有部分內容顯示不全的情況,例如下圖,右圖是正常頁面,邊是ios上下滑動后,卡頓導致如左圖下面部分丟失。

原因:

籠統說微信瀏覽器的內核,Android上面是使用自帶的WebKit內核,iOS里面由於蘋果的原因,使用了自帶的Safari內核,Safari對於overflow-scrolling用了原生控件來實現。對於有-webkit-overflow-scrolling的網頁,會創建一個UIScrollView,提供子layer給渲染模塊使用。

解決方法:

只需要在公共樣式加入下面這行代碼 

 

*{ -webkit-overflow-scrolling: touch;}

  

三、ios鍵盤喚起后收起頁面不歸位

輸入內容,軟鍵盤彈出,頁面內容整體上移,但是鍵盤收起,頁面內容不下滑

原因:固定定位的元素 在元素內 input 框聚焦的時候 彈出的軟鍵盤占位 失去焦點的時候軟鍵盤消失 但是還是占位的 導致input框不能再次輸入 在失去焦點的時候給一個事件

解決方法:

<input @blur.prevent="changeBlur()" />   //input標簽中加上以下代碼:

  

changeBlur(){ 
let u = navigator.userAgent,
 app = navigator.appVersion;
 let isIOS = !!u.match(/\(i[^;]+;( U;)? CPU.+Mac OS X/);
 if(isIOS){
 setTimeout(() => { const scrollHeight = document.documentElement.scrollTop || document.body.scrollTop || 0 window.scrollTo(0, Math.max(scrollHeight - 1, 0))
 },
 200) } }

  

四、安卓彈出的鍵盤遮蓋到文本框

解決方法:

給input和textarea標簽添加focus事件,如下,先判斷是不是安卓手機下的操作,當然,可以不用判斷機型,Document 對象屬性和方法,setTimeout延時0.5秒,因為調用安卓鍵盤有一點遲鈍,導致如果不延時處理的話,滾動就失效了

<input @focus="changefocus()"  />   //input標簽中加上以下代碼:

  

changefocus(){
  let u = navigator.userAgent, app = navigator.appVersion;
  let isAndroid = u.indexOf(‘Android‘) > -1 || u.indexOf(‘Linux‘) > -1;
  if(isAndroid){
    setTimeout(function() {
      document.activeElement.scrollIntoViewIfNeeded();
      document.activeElement.scrollIntoView();
    }, 500);       
  }
}

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM