1. 程式人生 > >ios h5 點選事件失效及點選延遲

ios h5 點選事件失效及點選延遲

1.ios h5 app avalon tap事件失效 使用MUI製作app介面,使用avalon.js渲染資料,發現在(Android上正常)ios上執行時容器div的avalon的ms-on-tap被內容遮住不執行.用MUI的on tap事件可以執行但改動較大,於是改為ms-on-click.(但是click事件有300ms延遲,解決方法在標題2處),搜尋到以下解決方法: 解決辦法有 4 種可供選擇:(來自:https://happycoder.net/solve-ios-safari-click-event-bug/) 將 click 事件直接繫結到目標元素(即 .target)上 將目標元素換成 <a> 或者 button 等可點選的元素 將 click 事件委託到非 document 或 body 的父級元素上 給目標元素加一條樣式規則 cursor: pointer; 推薦後兩種。從解決辦法來看,推測在 safari 中,不可點選的元素的點選事件不會冒泡到父級元素。通過新增 cursor: pointer 使得元素變成了可點選的了。 最終使用第4種方法解決掉. 2.click事件的300ms延遲 解決方法如下:(來自:http://www.xiaomeiti.com/note/3585) 粗暴型:禁用縮放  <meta name=”viewport” content=”width=device-width, user-scalable=no”> 關鍵是 user-scalable = no。 這個屬於簡單粗暴型的,雖然看似完美,但有一個致命的缺陷,當你必須完全禁用縮放來達到目的時候,就傻眼了,只有特定場景下的互動介面,此方案才可行,其它大多數情況,此法都不可行。 另外:<a href="http://www.oicqzone.com/hot/%3Ca%20href=" http:="" www.oicqzone.com="" hot="" chrome_6494_1.html'="" target="_blank" style="color: rgb(37, 110, 177); text-decoration-line: none;">chrome_6494_1.html' target='_blank'>Chrome 開發團隊不久前宣佈,在 Chrome 32 這一版中,他們將在包含 width=device-width 或者置為比 viewport 值更小的頁面上禁用雙擊縮放。當然,沒有雙擊縮放就沒有 300 毫秒點選延遲。 3.從根本解決——input框自動獲取焦點 如果沒有通過某種使用者互動,手機不會(觸發軟鍵盤彈起)。非使用者互動的當下觸發focus,但設定另一個元素的onClick事件,就能把focus事件帶起來。 意思就是,使用者進入頁面後,必須有一次和使用者的互動,之後才能自動獲取焦點並彈出軟鍵盤。 舉個例子: 比如我現在有input框,想讓它自動獲取焦點,並彈出軟鍵盤,但是不能一進頁面就讓他獲取焦點,這種行不通,因為沒有使用者互動,但是如果說,這個input框開始的時候是隱藏的,我點選其他地方,讓input框顯示,並且使其獲取焦點,彈出軟鍵盤,這個方式就是可行的,因為中間存在一次使用者互動。 實在抱歉,之前誤導了很多同學,在此對大傢伙說一聲抱歉。 下面的解決方案在我們專案裡可以用,也是因為上面的原因。       在做專案的過程中,需求文件有個要求是,當進入頁面後,第一個行input框要自動獲取焦點,並彈出數字軟鍵盤。            個人認為這個問題,大家做移動端的時候應該會遇到,今天拿出來說說我們遇到的這個小bug。 一個相對很簡單的需求,但是值得記錄一下,因為在此我們還是遇到了一些hack的。 先說一下上面的這個問題的基礎解決方案:          autofocus 屬性   :   文字輸入欄位被設定為當頁面載入時獲得焦點          <input type=”tel” autofocus=”autofocus”>  這一行程式碼其實就夠了! 但是問題來了、、 問題點:        android
系統
下          QQ、uc瀏覽器,input輸入框中需要頁面進入即自動彈出數字軟鍵盤,利用input標籤屬性autofocus=”autofocus”,經真機測試,依然無法彈出軟鍵盤。 解決方案:          1、利用要獲得焦點的input框新增一個focus(),此方法在chrome瀏覽器下無任何問題,但是在QQ、uc瀏覽器下雖然獲取了焦點,但是無法彈出數字軟鍵盤。          2、利用setTimeOut()開一個定時器的方法,但是,android手機參差不齊,效能問題嚴重,不可控以及容錯率太低,所以此方法比較不靠譜,不建議使用。          3、利用trigge()方法,對要獲得焦點的input框,呼叫一次”click”事件,既可解決上述問題。               xxxxxxxx.el.find(‘#c_payment_cardbin_input’).trigger(“click”).focus(); 以上就是我們此次專案的解決方案,網上查了一些能很好的解決萬惡的Android機相容性問題。