使用 rotationAngle 和 touchRadius

Chrome 39 中对 Chrome 中的 Touch API 做出了相对较小的更改,该版本在 TouchEvent 对象上引入了 webkitRotationAngle 属性的有效版本。现在,在 Chrome 45(2015 年 7 月推出 Beta 版)中,它不带前缀 rotationAngle,使我们的实现更符合 TouchEvent 规范和 Firefox 的实现。

虽然 rotationAngle 已经推出一段时间,但是什么值得说明,因为它让触摸手势有了更有趣的用法,尤其是在移动设备上。

从技术上讲,旋转角度是由 Touch.radiusXTouch.radiusY 定义的接触区域椭圆的度数(0 到 90 之间)。呃,很酷,对吧?(请注意,我只发现 Android 版 Chrome 不会将 radiusXradiusY 值锁定为 64px,而是会根据屏幕的触摸区域尺寸而调整这些值)。

这究竟意味着什么?

可以将其视为一种在屏幕上准确表示用户手指的大小、形状和方向的方法。用户不会总是用指尖点按屏幕,而是会经常按屏幕,就像给警察打指纹一样。如果没有 rotationAngle,您只需获取触摸手势的宽度和高度即可。使用 rotationAngle 时,您可以旋转 90 度(0 表示垂直,90 度表示水平)。为什么只有 90 度?您只需要 90 度角,因为当您经过这些角度时,radiusXradiusY 将发生变化以适应这些角度。

还有一点是,用户手指的接触区域会随着手指在屏幕上的压力程度而发生变化。它不是直接替代 force 的,但您可以区分屏幕上的浅色画笔,因为它们的表面积比用力按时小。

如何使用?

首先,你需要一台能够检测到这种情况的设备。Nexus 10 就可以正常运行。一个很好的例子是直接看 Rick Byers paint 示例。这也是一款不可或缺的工具

var touchHandler = function(e) {
    e.preventDefault();
    var touches = e.changedTouches;
    var touch = touches[0]; // only concerned about first touch.
    
    var rotationAngle = touch.rotationAngle || touch.webkitRotationAngle || 0;
    var radiusX = touch.radiusX || touch.webkitRadiusX || 1;
    var radiusY = touch.radiusY || touch.webkitRadiusY || 1;
    var force = touch.force || touch.webkitForce || 0;
    
    // Use the rotationAngle to rotate the 'p' element.
    
    p.style.width = radiusX * 2 + 'px';
    p.style.height = radiusY * 2 + 'px';
    p.style.transform = "rotate(" + rotationAngle + "deg)";
};

document.documentElement.ontouchstart = touchHandler;
document.documentElement.ontouchend = touchHandler;
document.documentElement.ontouchmove = touchHandler;

在实际生活中,您会在何处使用此代码?

显而易见,这样做会给用户带来直接的好处:

  • 例如,绘画和图片处理 Web 应用可以使用这些信息来改变应用于画布的笔触或效果。您可以使用触摸半径来改变画笔的大小,还可以组合使用 rotationAngle 来更改画笔在画布上的接触角度。
  • 增强型手势识别:如果您了解 rotationAngle,则可以创建单指手势来使对象旋转。

所有设备都支持此功能吗?

不是。目前这还不是很常见。如果您使用的是 Nexus 10,将会看到如下内容:

触摸角度旋转屏幕截图

图片来源:Rick Byers

如果设备无法理解轻触的旋转角度,rotationAngle 将为 0,并且 radiusXradiusY 值将相等(但可能会因当前的触摸表面区域而有所不同)。

为什么这么麻烦?

问的好。与网络上的许多功能一样,这种体验可以带来附加的体验。
触摸事件会在支持时正常运行,如果半径和旋转值可用,您可以改进应用,为用户提供更优质的体验。并非每个用户都拥有 Wacom 平板电脑,但如果存在,许多绘图应用都会使用 Wacom 平板电脑。

指针事件怎么样?

这实际上只是确保我们为依赖它的开发者提供完善的触摸事件 API。看看我是如何暂时回避这个问题的... 但更确切地说,如果您有兴趣遵循 Blink 的 PointerEvent 实现,可以参阅问题 471824 并参阅 Rick Byers 的跟踪文档

另请参阅