processing/p5.js

Mouse/touch event handling bug

Open

#4,223 创建于 2020年1月2日

在 GitHub 查看
 (17 评论) (0 反应) (0 负责人)JavaScript (3,178 fork)batch import
Area:EventsBugHelp Wanted

仓库指标

Star
 (20,784 star)
PR 合并指标
 (平均合并 8天 13小时) (30 天内合并 45 个 PR)

描述

I'm not positive that this is a bug, but it sure is confusing that the code below results in 3 very different behaviors in the browser, depending on whether devtools is open and on the device selected.

To recreate:

  • paste code below into the online editor in chrome browser
  • drag square around with mouse: sketch works as expected
  • open dev-tools and try the same: mouse is now out of sync
  • now open device-emulator with touch device: rect can no longer be dragged

Three behaviors (with mouse-events):

  1. With no js console closed, sketch works as expected
  2. with console opened but no device emulator, rect and mouse are out of sync
  3. with a touch-device in device emulator, mousePressed is never called and the rect is undraggable

With touch-events (comment mouse-events and uncomment touch-events below), the only difference is that in case C, we get behavior B (rect & mouse are out of sync)

  let x = 100, y = 100, active = false;

  function setup() {
    createCanvas(400, 400);
  }

  function draw() {
    background(0);
    rect(x, y, 50, 50);
  }

  //function touchEnded() {
  function mouseReleased() {
    //console.log('mouseReleased');
    active = false;
  }

  //function touchStarted() {
  function mousePressed() {
    //console.log('mousePressed', mouseX-pmouseX);
    active = (mouseX > x && mouseX < x + 50 && mouseY > y && mouseY < y + 50);
  }

  //function touchMoved() {
  function mouseDragged() {
    //console.log('mouseDragged:',mouseX-pmouseX);
    if (active) {
      x += mouseX - pmouseX;
      y += mouseY - pmouseY;
    }
  }

贡献者指南