【问题标题】:Web - How to differentiate between finger touch and stylus touch?Web - 如何区分手指触摸和手写笔触摸?
【发布时间】:2020-07-28 17:03:54
【问题描述】:

我正在尝试制作一个绘图网络应用程序。我想用手写笔画画并用手移动画布。这两者如何区分?

我在官方 MDN 文档中没有发现任何有希望的内容。

【问题讨论】:

  • 你可能不能......如果你能的话会很酷
  • 那会很困难。使用 Apple Pencil 之类的东西可能是可行的,但您的普通铅笔手写笔看起来与手指完全相同。或者,你可以做一些只有手才能做的事情。您可以将两个输入靠近一起移动并仅用一个输入进行绘制。
  • 可能是绘制/移动模式的简单切换按钮?让右手/左手艺术家可配置?
  • @r3wt 我在 iPhone 屏幕上的实验表明,手指触摸至少是手写笔触摸的两倍。测试页面在这里:terrymorse.com/coding/pointerevents/index.html

标签: javascript html web drawing stylus


【解决方案1】:

您可以通过捕获 PointerEvent 并检查其表示笔尖大小的宽度和高度属性,以相当高的把握判断触摸是手指还是触控笔。

手写笔的宽度和高度通常小于手指。


训练应用识别手指与触控笔

由于笔尖大小可能因屏幕、手指和触控笔而异,一种可能的策略是让用户训练应用识别不同类型的触摸:

“这是一个手指”命令,然后是几次手指触摸,直到应用程序具有良好的尺寸样本。

“这是一个手写笔”命令,然后是几个手写笔触摸。

PointerEvent interface 上的 MDN。

Demo that shows stylus (or finger) tip size of every screen touch.

这将显示触摸或点击屏幕的尖端大小:

let counter = 0;
// listen for 'pointerdown' events, detect tip size
window.addEventListener('pointerdown', (evt) => {
  const w = Number(evt.width).toFixed(1);
  const h = Number(evt.height).toFixed(1);
  const div = document.getElementById('result');
  counter++;
  div.innerHTML = `${counter}: stylus width: ${w}, height: ${h}`;
});
body {
  background-color: #eee;
  color: black;
}

#result {
  margin: 0.5rem;
  width: 18rem;
  min-height: 2rem;
  padding: 0.5rem;
  border: 1px solid gray;
  color: green;
}
<h4>Test of Pointer Stylus Tip Size</h4>
<p>Touch or click anywhere...</p>
<div id="result"></div>

【讨论】:

  • 我想这种方法可能会给某些用户带来许多不良错误,具体取决于浏览器、手写笔、手指大小等,然后 UX 就被拍摄了。如果没有经过验证的 api,几乎总是应该避免这样的黑客攻击!您的用户将因完全可预防的原因而受苦
  • 我不会那么不屑一顾。当然,在开发方面需要更多的努力。可能会提示用户训练应用程序以区分手指和触控笔输入。
  • 哦,这是个好主意。我认为您应该更新您的答案以提供该建议。最后想一想,如果应用程序无法区分手写笔和手指怎么办?另外,如果事件的高度/宽度不一致怎么办?您如何始终如一地区分两者?如果事件高度/宽度有可能发生冲突怎么办?
  • 我会将培训建议添加到答案中,感谢您的建议。
猜你喜欢
  • 2021-05-06
  • 1970-01-01
  • 2016-05-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多