android 上的上下文菜单事件隐藏鼠标

Context menu event hiding mouse up on android

我有一张图片,我需要测量用户触摸图片或鼠标在图片上按下的时间。所以我使用鼠标按下事件来获取开始时间,使用鼠标释放事件来获取结束时间。但是,当 android 设备上的 运行 时,长按会触发上下文菜单弹出,这是我不想要的。我可以通过在上下文菜单事件上添加函数并从中添加 return false 来隐藏上下文菜单。上下文菜单被阻止并且不显示。但是鼠标松开事件也没有触发。

如何阻止上下文菜单并仍然有鼠标松开事件?

Jsfiddle [此处][1]

  [1]: https://jsfiddle.net/vghk9q53/5/

回答我自己的问题。我被我的同事弄糊涂了,他说浏览器足够聪明,可以将触摸事件转换为鼠标事件,这是不正确的。为了解决这个问题,我需要额外监听@Mazz 指出的触摸结束事件。解决方案的 JsFiddle

<body>
  <img id="image" src="https://launchbit.com/carbon-i/6496-ZenHubCarbon.png" alt="" border="0" height="100" width="130" style="max-width: 130px;">
  <textarea id="text" rows="25"></textarea>
  <script>
    function printOutput(txt) {
      console.log(txt);
      document.getElementById("text").value = document.getElementById("text").value + txt + "\n";
    }
    window.addEventListener("load", function(event) {
      document.getElementById("image").oncontextmenu = function() {
        printOutput("context menu");
        return false;
      };
      document.getElementById("image").addEventListener("mousedown", function() {
        printOutput("mouse down");
      });
      document.getElementById("image").addEventListener("mouseup", function() {
        printOutput("mouse up");
      });
      document.getElementById("image").addEventListener("touchstart", function() {
        printOutput("touchstart");
      }, false);
      document.getElementById("image").addEventListener("touchend", function() {
        printOutput("touchend");
      }, false);
      document.getElementById("image").addEventListener("touchcancel", function() {
        printOutput("touchcancel");
      }, false);
      document.getElementById("image").addEventListener("touchmove", function() {
        printOutput("touchmove");
      }, false);
    });
  </script>
</body>

而不是使用 mousedownmouseup 你应该使用 touchstarttouchend