· 2 分鐘閱讀
iOS mousedown 事件觸發問題
# 前端iOS 在某些版本下 mousedown 處理器不會正確運作,不過在其他裝置上(像 Android 等等),mousedown 仍然是可以正確運作的。
解決方法是在手機上不要用 mousedown 處理器,用 touchStart 來處理,但不知道觸發順序是否會受到影響?原本在 click 事件當中,是 blur 會先觸發(如果有)再觸發 click 事件,為了躲掉這個點才用 mousedown 取代。
在 codepen 上進行簡單的實驗:
See the Pen touchstart-test by 愷開 (@kjj6198) on CodePen.
可以發現觸發順序會是 touchstart > mousedown > blur,看來如果同時加入 touchstart 跟 mousedown 事件,在兩個事件都支援的情況下,兩個事件會按照 touchstart > mousedown 的順序發生?
在網路上查了一下,發現是 iOS<13 時,mousedown 事件才不會被觸發,iOS 13 以後是正常運作。另外如果是 iPad 的話似乎還可以判斷 touch 是來自手指還是 apple pencil。
結論
- 在
iOS做 mousedown 之類的綁定時要小心,盡量用 touch 系的事件取代。 - iOS13 跟 iOS<13 是個分界點,要另外做測試。
先在這裡記錄一下,之後再把詳細行為一一補上。
相關文章
- 前端使用圖片時需要注意的事從 Jake Archibald 的文章延伸,整理現代響應式圖片應該怎麼寫:為什麼 width/height 還是要加、什麼時候用 CSS aspect-ratio、AVIF 跟 WebP 怎麼選,以及用 picture/source/srcset 處理手機版圖片切換。
- CSS field-sizing — 用一行 CSS 讓表單元素自動調整大小textarea 自動調整高度,以前只能靠 JavaScript 監聽 scrollHeight。CSS field-sizing: content 一行就能取代,支援 textarea、input、select。本文整理舊做法的痛點與 field-sizing 的用法。
- 讓你的超連結底線更好看:text-underline-offset預設的情況下底線跟文字很接近,有些設計師不喜歡這種樣式,我自己也覺得沒有很好看。
- 為什麼網頁不應該追求 Pixel Perfect只有在 Pixel Perfect 很重要的時候才應該關注他,否則往往會讓你得到一個雙輸的局面。