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 是個分界點,要另外做測試。
先在這裡記錄一下,之後再把詳細行為一一補上。