h5頁面在iOS上的問題解決

一、ios移動端 軟鍵盤收起後,頁面內容被頂上去,不下滑回原處javascript

代碼以下:html

 
$(function(){
        $('input,textarea').on('blur',function(){
            window.scroll(0,0);
        });
        $('select').on('change',function(){
            window.scroll(0,0);
        });
 })
 

原理就是彈起鍵盤的時候,window.scrollY會從0變到鍵盤的高度(例如:200),當輸入框焦點失去後讓scrollY回到0就行了。html5

可是有一個很嚴重的問題:若是頁面上有按鈕須要操做 ,例如,評論的輸入框+發佈按鈕,輸入完文字,點擊「發佈」,觸發click事件的時候,會致使頁面先觸發blur事件,鍵盤迴落,而後一切就結束了。。。。按鈕點擊沒有起任何做用。java

解決方案: 把click事件更換成ontouchstart 能夠解決這個問題。 ontouchstart 事件優於click事件觸發。android

 

二、移動端 input,按鈕等樣式在安卓與ios上不一樣的解決方案ios

input,select,button{
  -webkit-appearance:none;
  appearance:none;
}

去掉 IOS默認樣式便可web

 

三、IOS上下拉動滾動條時卡頓、慢ajax

 
body {

 -webkit-overflow-scrolling: touch;
 overflow-scrolling: touch;

}
 

 

四、ios頁面拖動問題小程序

body {
/* 當手指從觸摸屏上移開,滾動會當即中止 */
 -webkit-overflow-scrolling: auto
 overflow-scrolling: auto
}

 

五、iphone及ipad下輸入框默認內陰影微信小程序

-webkit-appearance: none;

 

六、日期問題

對於yyyy-mm-dd hh:mm:ss 這種格式在ios系統不識別。

時間格式化的時候,在瀏覽器端處理好好的,到了手機端,就變成NAN,或者null,這種狀況,是ios系統不能轉化這種類型的時間。

let date = new Date('2019-02-28 18:33:24');    // null

解決方案:轉成 yyyy/mm/dd hh:mm:ss 這種格式就能夠了。

replace(/-/g, "/")

七、ios在微信小程序的webview,鍵盤收回,頁面底部會留白

這個問題懷疑是頁面的scroll設置了auto致使的。

解決思路:

復現該bug之後發現只要滾動一下頁面就可使頁面恢復正常,因而就想可不能夠在input失去焦點之後調用一下頁面滾動,來完成該操做,發現果真能夠。而後就產生了以下代碼複製代碼

temporaryRepair(){
    var currentPosition,timer;
    var speed=1;//頁面滾動距離
    timer=setInterval(function(){
        currentPosition=document.documentElement.scrollTop || document.body.scrollTop;
        currentPosition-=speed; 
        window.scrollTo(0,currentPosition);//頁面向上滾動
        currentPosition+=speed; //speed變量
        window.scrollTo(0,currentPosition);//頁面向下滾動
        clearInterval(timer);
    },1);
}

 

八、iphone fixed 失效,致使一些機器上textarea光標偏移

解決方案: 全部兄弟元素變成absolute, 父元素overflow:auto。複製代碼

父元素{
height: 100vh;
position: relative;
overflow: auto;}

兄弟元素{
position: absolute;
top: 0;
bottom: 0;
left: 0;
right: 0;
overflow-x: visible;
overflow-y: auto;
padding-bottom: 10px;
z-index: 1;}
 

 

九、鍵盤遮擋輸入框

輸入框若是使用了fixed固定在底部,鍵盤頂起的時候,iphone上fixed會失效,致使頁面滾動輸入框會隨着頁面滾動,而且在部分機型上,輸入框偶爾會被鍵盤遮擋,這種偶現的問題,很不友好。

解決方案: 放棄使用fixed佈局,頁面若是有滾動,也放棄absolute,若是強行要使用absolute,請參考上一條光標偏移。建議使用flex佈局,兼容性會獲得解決。

固然,若是遇到以上這些問題,說明產品設計就很不合理,若是必要的話,仍是要更換設計,改爲input不須要被鍵盤頂起的設計,這些兼容性的解決方案,也不併不能完美的解決全部機型的問題。

 
十、ios和android下觸摸元素時出現半透明灰色遮罩
-webkit-tap-highlight-color:rgba(255,255,255,0)

 

十一、頂部狀態欄背景色

<meta name="apple-mobile-web-app-status-bar-style" content="black" />

說明:

除非你先使用apple-mobile-web-app-capable指定全屏模式,不然這個meta標籤不會起任何做用。

 若是content設置爲default,則狀態欄正常顯示。若是設置爲blank,則狀態欄會有一個黑色的背景。若是設置爲blank-translucent,則狀態欄顯示爲黑色半透明。

 若是設置爲default或blank,則頁面顯示在狀態欄的下方,即狀態欄佔據上方部分,頁面佔據下方部分,兩者沒有遮擋對方或被遮擋。

 若是設置爲blank-translucent,則頁面會充滿屏幕,其中頁面頂部會被狀態欄遮蓋住(會覆蓋頁面20px高度,而iphone4和itouch4的Retina屏幕爲40px)。

 默認值是default。

 

十二、IOS中input鍵盤事件keyup、keydown、keypress支持不是很好

 問題是這樣的,用input search作模糊搜索的時候,在鍵盤裏面輸入關鍵詞,會經過ajax後臺查詢,而後返回數據,而後再對返回的數據進行關鍵詞標紅。

 用input監聽鍵盤keyup事件,在安卓手機瀏覽器中是能夠的,可是在ios手機瀏覽器中變紅很慢,用輸入法輸入以後,並未馬上相應keyup事件,只有在經過刪除以後才能相應!

 解決辦法:

能夠用html5的oninput事件去代替keyup,而後就達到相似keyup的效果!

 
<script type="text/javascript"> document.getElementById('testInput').addEventListener('input', function(e){ var value = e.target.value; }); </script>
相關文章
相關標籤/搜索