iOS 阻止 touch 事件默认行为
小于 1 分钟约 130 字
webview 开发时,iOS 中 safari 浏览器通过 preventDefault 方法来阻止默认行为。
import { useEffect } from 'react'
const usePreventTouchEvent = <T extends HTMLElement = HTMLDivElement>(containerRef: React.RefObject<T>) => {
  useEffect(() => {
    const preventDefaultBehavior = (event: Event): void => {
      event.preventDefault()
    }
    const touchEvents: string[] = ['touchmove']
    const dragContainer = containerRef.current
    if (dragContainer) {
      touchEvents.forEach((eventType: string) => {
        dragContainer.addEventListener(eventType, preventDefaultBehavior, {
          passive: false
        })
      })
      return () => {
        touchEvents.forEach((eventType: string) => {
          dragContainer.removeEventListener(eventType, preventDefaultBehavior)
        })
      }
    }
  }, [containerRef])
}
export default usePreventTouchEvent
注意
在 iOS 上,需要增加 { passive: false } 参数,否则会导致 touch 事件的 preventDefault() 行为失效。