首页 > 解决方案 > 是否保证在 `touchend` 之后、`touchend` 的事件处理程序可以运行之前触发`click` 事件?

问题描述

有一个 Chrome 错误在click之后不会触发touchendhttps ://bugs.chromium.org/p/chromium/issues/detail?id=1141207#c10

我想模拟点击使用dispatchEvent

let timer: number | null = null;
window.addEventListener('touchend', event => {
  if (timer) {
    clearTimeout(timer);
  }
  timer = window.setTimeout(() => {
    event.target?.dispatchEvent(new Event('click', {
      bubbles: true,
      cancelable: true,
    }));
  }, 0);
});

window.addEventListener('click', () => {
  if (timer) {
    clearTimeout(timer);
  }
});

我假设在单击处理程序运行之前(如果发生单击事件),超时回调是不可能运行的。有了这个假设,我可以将超时延迟设为 0。如果这个假设是错误的,那么我需要更长的延迟,可能是 1-2 帧。click保证在 , before 的事件处理程序运行之后立即touchend触发touchend

在那儿

标签: javascriptgoogle-chrometouch

解决方案


推荐阅读