首页 > 解决方案 > 如何修复参考错误:使用反应找不到变量触摸事件?

问题描述

我想修复reference error: cannot read variable TouchEvent. 此错误显示在 Safari 上,但不在其他浏览器上。

我正在尝试一种方法来检测事件并复制鼠标事件,如下所示。但不知何故,在 Safari 上,当它执行下面的方法时,它会抛出上面提到的错误。

function copy_mouse_event(event) {
  const event_init = {
    // EventInit
    bubbles: event.bubbles,
    eventPhase: event.eventPhase,

    // UIEventInit
    detail: event.detail,
    view: event.view,

    // EventModifierInit
    altKey: event.altKey,
    ctrlKey: event.ctrlKey
  };

  // initialise MouseEvent data which is shared by wheel, mouse and pointer events
  let mouse_event_init = {};
  if (event instanceof MouseEvent) {
    mouse_event_init = {
      ...event_init,
      button: event.button,
      buttons: event.buttons,
      clientX: event.clientX,
      clientY: event.clientY,
      relatedTarget: event.relatedTarget,
      screenX: event.screenX,
      screenY: event.screenY
    };

    if (event instanceof WheelEvent) {
      const wheel_event_init = {
        ...mouse_event_init,
        deltaMode: event.deltaMode,
        deltaX: event.deltaX,
        deltaY: event.deltaY,
        deltaZ: event.deltaZ,
        wheelDelta: event.wheelDelta,
        wheelDeltaX: event.wheelDeltaX,
        wheelDeltaY: event.wheelDeltaY
      };
      return new WheelEvent(event.type, wheel_event_init);
    }
  }

  // try the modern pointer event first, then mouse and touch events
  if (event instanceof PointerEvent) {
    const pointer_event_init = {
      ...mouse_event_init,
      pointerId: event.pointerId,
      width: event.width,
      height: event.height,
      pressure: event.pressure,
      pointerType: event.pointerType,
      isPrimary: event.isPrimary
    };
    return new PointerEvent(event.type, pointer_event_init);
  } else if (event instanceof MouseEvent) {
    return new MouseEvent(event.type, mouse_event_init);
  } else if (event instanceof TouchEvent) {
    //error occurs here only on safari
    const touch_event_init = {
      ...event_init,
      changedTouches: event.changedTouches,
      targetTouches: event.targetTouches,
      touches: event.touches
    };
    return new TouchEvent(event.type, touch_event_init);
  }
}

该错误仅发生在此行else if (event instanceof TouchEvent)且仅在 Safari 上。我不确定如何解决此问题以及导致问题的原因。有人可以让我对此有所了解吗?

标签: reactjs

解决方案


那是因为根据DocumentationTouchEvent不受支持。safariTouchEvent


推荐阅读