Chrome 和 Firefox Android 中长按的奇怪行为

Weird behavior of long presses in Chrome and Firefox for Android

因此,我在 Chrome 和 Firefox Android 中发现了一些奇怪的长按行为。我试图避免滚动、上下文菜单、振动和选择文本。另外,我需要触摸不被取消。我设置了这样一个简单的页面:

var logger = document.getElementById("logger")

function touchHandler(e) {
  e.preventDefault()
  logger.innerText += e.type + "\n"
}
function contextMenuHandler(e) {
  e.preventDefault()
  logger.innerText += e.type + "\n"
}

window.addEventListener("touchstart", touchHandler)
window.addEventListener("touchmove", touchHandler)
window.addEventListener("touchend", touchHandler)
window.addEventListener("touchcancel", touchHandler)
window.addEventListener("contextmenu", contextMenuHandler)
<pre id="logger"></pre>

我得到了这些结果,在不移动手指的情况下按下一点:

  1. 当我默认阻止触摸事件和 contextmenu 事件时:
    • Chrome 日志:
      touchstart
      contextmenu
      touchend
      请注意 Chrome 在 contextmenu 被触发的同时振动。
    • Firefox 日志:
      touchstart
      contextmenu
      touchcancel
      Firefox 在 contextmenu 触发后立即取消触摸事件,这对我来说是个问题。
  2. 当我默认只阻止触摸事件时:
    • Chrome 日志:
      touchstart
      contextmenu
      touchend
      好的。它不振动。
    • Firefox 记录同样的事情。 这一次,它没有取消触摸,而是选择了一些文本。
    • 当我默认只阻止 contextmenu 事件时:
    • Chrome 日志:
      touchstart
      contextmenu
      touchend
      但是,它会振动和滚动。
    • Firefox 日志:
      touchstart
      contextmenu
      touchcancel
      同样,它取消了触摸,但没有选择任何文本。
  3. 最后,当没有事件被默认阻止时:
    • Chrome 日志:
      touchstart
      contextmenu
      touchend
      并且仍然振动和滚动。
    • Firefox 日志:
      touchstart
      contextmenu
      touchcancel
      一样 :(

那么,有什么方法可以防止滚动、上下文菜单、振动和选择文本,并避免 Firefox 取消触摸

已在未来的 firefox 移动浏览器中修复: https://bugzilla.mozilla.org/show_bug.cgi?id=1481923