爲移動端h5頁面遇到的問題作些記錄
object-fit:fill; //video鋪滿父元素 -webkit-appearance:none; //消除iOS輸入框的內陰影
因爲iphoneX之後的版本劉海屏和底部不是完整的方型區域,形成頁面顯示異常。處理方式是頁面將劉海屏和底部的區域排除在外使用中間部分,即所謂的安全區域。
<meta name="viewport" content="viewport-fit=contain"> //可視化窗口徹底包含網頁內容 <meta name="viewport" content="viewport-fit=cover"> //網頁內容徹底覆蓋 <meta name="viewport" content="viewport-fit=auto"> //默認值和contain同樣
若是要適配劉海屏必需要使用cover
的模式javascript
安全區域涉及四個值css
safe-area-inset-left //安全區域距離左邊邊界距離 safe-area-inset-righ //安全區域距離右邊邊界距離 safe-area-inset-top //安全區域距離頂部邊界距離 safe-area-inset-bottom //安全區域距離底部邊界距離
左右距離通常爲0,應該是頁面橫屏是纔會用到
兩個在css配合使用的函數:env
和constant
;env
必須iOS>=11.2才支持,constant
相反在iOS<11.2版本下使用。
例如:若是咱們的頭部標題navbar使用position:fixed
的時候須要改寫成以下前端
.navbar{ top:0; top:constant(safe-area-inset-top); top:env(safe-area-inset-top);/* 減去安全區域上邊距 */ }
個人處理方式是使用position:relative
減掉邊距,內部內容區域使用position:absolute
相關連接:h5 在全屏iphonex中的適配java
將方法定義在window下,即定義成全局便可git
iOS: window.webkit.messageHandlers[約定的名稱,如項目測名稱]postMessage(參數)
Android:window約定的名稱,如項目測名稱 (參數)github
這個是瀏覽器原生支持的方法,經過監聽狀態變化,具體例子以下;web
const hiddenProperty = 'hidden' in document ? 'hidden' : 'webkitHidden' in document ? 'webkitHidden' : 'mozHidden' in document ? 'mozHidden' : null; document.addEventListener('visibilitychange', () => { if (document[hiddenProperty]) { //當離開H5 跳轉到app原生的頁面時,這裏會被觸發 // Toast('頁面隱藏了'); } else { //當從原生頁面用戶一系列操做後,返回H5的時候,這裏會被觸發 // Toast('頁面展現了'); } });
安卓端的webview,使用<input type='file'>
上傳圖片異常,選中圖片後沒法回顯到頁面。解決方法是原生處理,以下連接;(處理完後安卓使用h5上傳圖片會使用相冊的照片而不會有拍照選項;這裏雖然不影響使用,或許能夠進一步優化)
相關連接:Android WebView 不支持 H5 input type="file" 解決方法segmentfault
場景:彈框中的輸入框聚焦時會彈出手機的軟鍵盤,而後收起鍵盤會發現,彈框中的按鈕或者關閉沒法點擊。
當時誤覺得是什麼問題使頁面"卡"住了,後面通過觀察嘗試,發現是頁面發生滑動致使的。當軟鍵盤彈出時,會把webview的可視區域向上滾動一段距離,而軟鍵盤收起時位置沒有還原回來致使頁面發生偏移,監聽scrollY就會看到變化過程。"卡"住產生的緣由就是位置變了,這裏比較玄學的就是實際位置變了,按鈕卻顯示在正常的位置,也致使開始沒即便定位問題緣由。瀏覽器
window.scrollTo(0,0)
將頁面回到正常的位置由於前端項目都使用Vue
框架,這裏移動端頁面UI庫,對比mint-ui
,最後選擇了Vant安全