使用 rotationAngle 和 touchRadius

Chrome 39 對 Chrome 的 Touch API 進行了相對較小的變更,在 TouchEvent 物件上引入了 webkitRotationAngle 屬性的工作版本。現在,在 Chrome 45 (2015 年 7 月 Beta 版) 中,它已取消前置字元,改為 rotationAngle,使我們的實作更符合 TouchEvent 規格和 Firefox。

雖然這項功能已推出一段時間,但還是值得說明 rotationAngle 是什麼,因為這項功能可讓您在行動裝置上使用更多有趣的觸控手勢。

嚴格來說,旋轉角度是指由 Touch.radiusX 和 Touch.radiusY 定義的接觸區域橢圓角度 (介於 0 到 90 度之間)。呃,很酷吧?(值得注意的是,我發現 Android 版 Chrome 不會將 radiusX 和 radiusY 值鎖定為 64 像素,而是根據螢幕的接觸大小而有所不同)。

這代表什麼意思?

您可以將其視為在螢幕上準確呈現使用者手指大小、形狀和方向的方式。使用者不一定會用指尖輕觸螢幕,而是經常像按指紋一樣按壓螢幕。如果沒有 rotationAngle,您只會取得觸控手勢的寬度和高度。使用 rotationAngle 時,可旋轉 90 度 (0 為垂直,90 為水平)。為什麼只有 90 度?您只需要 90 度,因為當您移動超過這些角度時,radiusX 和 radiusY 會隨之變更。

另一個有趣的地方是,使用者手指在螢幕上的壓力程度不同,接觸面積也會隨之改變。這並非直接取代 force,但您可以區分螢幕上的輕刷動作,因為這類動作的表面積會比用力按壓小。

如何使用?

首先,你需要能偵測到這項資訊的裝置。Nexus 10 就能正常運作。Rick Byers 的繪製範例就是很好的例子。不過,我們也提供不使用 Canvas 的方法。

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;

實務上,您會在何處使用這項功能?

在某些明顯的地方,這會立即為使用者帶來好處:

  • 舉例來說,繪圖和圖片操控網頁應用程式可以使用這項資訊,改變套用至畫布的筆觸或效果。您可以使用觸控半徑來改變筆刷的大小,也可以結合 rotationAngle 來改變筆刷在畫布上的接觸角度。
  • 強化手勢辨識:如果瞭解 rotationAngle,就能建立單指手勢,讓物件旋轉。

每部裝置都支援這項功能嗎?

不,目前還不普遍。如果您使用的是 Nexus 10,會看到類似下方的畫面,

觸控角度旋轉螢幕截圖

圖片來源:Rick Byers。

如果裝置無法辨識觸控旋轉角度,rotationAngle 會是 0,radiusX 和 radiusY 值則會相等 (但可能會因目前的觸控介面區域而異)。

為什麼要多此一舉呢?

好問題!如同網路上的許多功能,這項功能可提供更豐富的體驗。
如果支援觸控事件,系統就會執行這類事件。如果半徑和旋轉值可用,您可以強化應用程式,為使用者提供更強大的體驗。並非每位使用者都有 Wacom 繪圖板,但許多繪圖應用程式都會善用這項功能。

指標事件呢?

這只是為了確保我們為依賴觸控事件 API 的開發人員,提供完整的 API。我稍微避開了這個問題…不過,如果您有興趣追蹤 Blink 的 PointerEvent 實作,可以為問題 471824 加上星號,並閱讀 Rick Byers 的追蹤文件。

另請參閱